# Testnet Oracles
Source: https://docs.chain.link/any-api/testnet-oracles

> For the complete documentation index, see [llms.txt](/llms.txt).

<AnyApiCallout callout="usefunctions" />

> **TIP: Link token address and Faucet details**
>
> To retrieve the LINK token address or get faucet details for your testnet of choice, see the [LINK Token Contracts](/resources/link-token-contracts) page.

## Operator Contracts

Testnet [Operator contracts](https://github.com/smartcontractkit/chainlink/blob/contracts-v1.3.0/contracts/src/v0.8/operatorforwarder/Operator.sol) are deployed and maintained on the following networks:

| Testnet          | Oracle Address                                                                                                                  |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Ethereum Sepolia | [`0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD`](https://sepolia.etherscan.io/address/0x6090149792dAAeE9D1D568c9f9a6F6B46AA29eFD) |
| Avalanche Fuji   | [`0x022EEA14A6010167ca026B32576D6686dD7e85d2`](https://testnet.snowtrace.io/address/0x022EEA14A6010167ca026B32576D6686dD7e85d2) |
| Binance Testnet  | [`0xCC79157eb46F5624204f47AB42b3906cAA40eaB7`](https://testnet.bscscan.com/address/0xCC79157eb46F5624204f47AB42b3906cAA40eaB7)  |
| Fantom Testnet   | [`0xCC79157eb46F5624204f47AB42b3906cAA40eaB7`](https://testnet.ftmscan.com/address/0xCC79157eb46F5624204f47AB42b3906cAA40eaB7)  |

## Jobs

### Job IDs

To make testing simple, jobs are configured with the following properties:

- Each request on a testnet costs 0.1 LINK.
- Each oracle will wait for 1 confirmation before processing a request.
- Jobs have the same IDs across each testnet.
- Parameters are required. See [examples](#examples) for code snippets.

### Examples

#### Get > bytes

A full example can be found [here](/any-api/get-request/examples/large-responses).

##### Request method

```solidity
function request() public {
  Chainlink.Request memory req = _buildChainlinkRequest('7da2702f37fd48e5b1b9a5715e3509b6', address(this), this.fulfill.selector);
  req._add(
      'get',
      'https://ipfs.io/ipfs/QmZgsvrA1o1C8BGCrx6mHTqR1Ui1XqbCrtbMVrRLHtuPVD?filename=big-api-response.json'
  );
  req._add('path', 'image');
  _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK
}
```

##### Callback method

```solidity
bytes public data;
string public imageUrl;
function fulfill(bytes32 requestId, bytes memory bytesData) public recordChainlinkFulfillment(requestId) {
    data = bytesData;
    imageUrl = string(data);
}
```

#### Get > uint256

A full example can be found [here](/any-api/get-request/examples/single-word-response).

##### Request method

```solidity
function request() public {
  Chainlink.Request memory req = _buildChainlinkRequest('ca98366cc7314957b8c012c72f05aeeb', address(this), this.fulfill.selector);
  req._add(
      'get',
      'https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD'
  );
  req._add('path', 'RAW,ETH,USD,VOLUME24HOUR');
  req._addInt('times', 10**18); // Multiply by times value to remove decimals. Parameter required so pass '1' if the number returned doesn't have decimals
  _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK
}
```

##### Callback method

```solidity
uint256 public volume;
function fulfill(bytes32 _requestId, uint256 _volume) public recordChainlinkFulfillment(_requestId) {
  volume = _volume;
}
```

#### Get > int256

##### Request method

```solidity
function request() public {
  Chainlink.Request memory req = _buildChainlinkRequest('fcf4140d696d44b687012232948bdd5d', address(this), this.fulfill.selector);
  req._add(
      'get',
      'https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD'
  );
  req._add('path', 'RAW,ETH,USD,VOLUME24HOUR');
  req._addInt('times', 10**18); // Multiply by times value to remove decimals. Parameter required so pass '1' if the number returned doesn't have decimals
  _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK
}
```

##### Callback method

```solidity
int256 public volume;
function fulfill(bytes32 _requestId, int256 _volume) public recordChainlinkFulfillment(_requestId) {
  volume = _volume;
}
```

#### Get > bool

##### Request method

```solidity
function request() public {
  Chainlink.Request memory req = _buildChainlinkRequest('c1c5e92880894eb6b27d3cae19670aa3', address(this), this.fulfill.selector);
  req._add(
      'get',
      'https://app.proofi.com/api/verify/eip155/0xCB5085214B6318aF3dd0FBbb5E74fbF6bf332151?contract=0x2f7f7E44ca1e2Ca1A54db4222cF97ab47EE026F1'
  );
  req._add('path', 'approved');
  _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK
}
```

##### Callback method

```solidity
bool public approved;
function fulfill(bytes32 _requestId, bool _approved) public recordChainlinkFulfillment(_requestId) {
  approved = _approved;
}
```

#### Get > string

A full example can be found [here](/any-api/get-request/examples/array-response).

##### Request method

```solidity
function request() public {
  Chainlink.Request memory req = _buildChainlinkRequest('7d80a6386ef543a3abb52817f6707e3b', address(this), this.fulfill.selector);
  req._add(
      'get',
      'https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&per_page=10'
  );
  req._add('path', '0,id');
  _sendChainlinkRequest(req, (1 * LINK_DIVISIBILITY) / 10); // 0,1*10**18 LINK
}
```

##### Callback method

```solidity
string public id;
function fulfill(bytes32 _requestId, string memory _id) public recordChainlinkFulfillment(_requestId) {
  id = _id;
}
```