Single Word Response
This guide explains how to make an HTTP GET request to an external API from a smart contract using Chainlink’s Request & Receive Data cycle and receive a single response.
Example
This example shows how to:
- Fetch a single word response in a single call.
The Cryptocompare GET /data/pricemultifull API returns the current trading info (price, vol, open, high, low) of any list of cryptocurrencies in any other currency that you need. To check the response, you can directly paste the following URL in your browser https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD
or run this command in your terminal:
curl -X 'GET' \
'https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD' \
-H 'accept: application/json'
The response should be similar to the following example:
{
"RAW": {
"ETH": {
"USD": {
"TYPE": "5",
"MARKET": "CCCAGG",
"FROMSYMBOL": "ETH",
"TOSYMBOL": "USD",
"FLAGS": "2049",
"PRICE": 2867.04,
"LASTUPDATE": 1650896942,
"MEDIAN": 2866.2,
"LASTVOLUME": 0.16533939,
"LASTVOLUMETO": 474.375243849,
"LASTTRADEID": "1072154517",
"VOLUMEDAY": 195241.78281014622,
"VOLUMEDAYTO": 556240560.4621655,
"VOLUME24HOUR": 236248.94641103,
...
}
To consume an API with multiple responses, your contract must import ChainlinkClient. This contract exposes a struct called Chainlink.Request
, which your contract should use to build the API request. The request should include the following parameters:
- Link token address
- Oracle address
- Job id
- Request fee
- Task parameters
- Callback function signature
Making a GET request will fail unless your deployed contract has enough LINK to pay for it. Learn how to Acquire testnet LINK and Fund your contract.
Assume that a user wants to call the API above and retrieve only the 24h ETH trading volume from the response.
To use this contract:
-
Open the contract in Remix.
-
Compile and deploy the contract using the Injected Provider environment. The contract includes all the configuration variables for the Sepolia testnet. Make sure your wallet is set to use Sepolia. The constructor sets the following parameters:
- The Chainlink Token address for Sepolia by calling the
setChainlinkToken
function. - The Oracle contract address for Sepolia by calling the
setChainlinkOracle
function. - The
jobId
: A specific job for the oracle node to run. In this case, you must call a job that is configured to call a public API, parse a number from the response and remove any decimals from it. We are going to use a generic GET>uint256 job that can be found here.
- The Chainlink Token address for Sepolia by calling the
-
Fund your contract with 0.1 LINK. To learn how to send LINK to contracts, read the Fund Your Contracts page.
-
Call the
volume
function to confirm that thevolume
state variable is equal to zero. -
Run the
requestVolumeData
function. This builds theChainlink.Request
using the correct parameters:- The
req.add("get", "<cryptocompareURL>")
request parameter provides the oracle node with the URL from which to fetch ETH-USD trading info. - The
req.add('path', 'RAW,ETH,USD,VOLUME24HOUR')
request parameter tells the oracle node where to fetch the 24h ETH volume in the json response. It uses a JSONPath expression with comma(,) delimited string for nested objects. For example:'RAW,ETH,USD,VOLUME24HOUR'
. - The
req.addInt('times', timesAmount)
request parameter provides the oracle node with the multipliertimesAmount
by which the fetched volume is multiplied. Use this to remove any decimals from the volume. Note: Thetimes
parameter is mandatory. If the API that you call returns a number without any decimals then provide1
astimesAmount
. TheAPIConsumer
in the example above is flexible enough to call any public API as long as the URL in get, path, and timesAmounnt are correct.
- The
-
After few seconds, call the
volume
function. You should get a non-zero response.