---
title: Authentication
sidebar_position: 3
---

import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";

The Market Data API uses a **Bearer Token** for authentication. The token is a programmatic representation of your username and password credentials, so you must keep it secret just as you would your username and password. The token is required for each request you make to the API.

## Obtaining a Token

To obtain it, sign-in to your customer dashboard using your username and password and request a token. It will be delivered by email to the address you used to sign-in.  

## Using the Token

There are two ways to pass this token to the API with your requests:

1. Header Authentication
2. URL Parameter Authentication

:::tip
We recommend using header-based authentication to ensure your token is not stored or cached. While Market Data makes a conscientious effort to delete tokens from our own server logs, we cannot guarantee that your token will not be stored by any of our third party cloud infrastructure partners.
:::

## Header Authentication

Add the token to the ```Authorization``` header using the word ```Bearer```. 

### Code Examples

<Tabs>
<TabItem value="HTTP" label="HTTP" default>

```http
GET /v1/stocks/quotes/SPY/ HTTP/1.1
Host: api.marketdata.app
Accept: application/json
Authorization: Bearer {token}
```

:::tip
The curly braces around token are a placeholder for this example. Do not actually wrap your token with curly braces. 
:::

</TabItem>
<TabItem value="Node.js" label="Node.js">

```javascript
const https = require('https');

// Your token
const token = 'your_token_here';

// The API endpoint for retrieving stock quotes for SPY
const url = 'https://api.marketdata.app/v1/stocks/quotes/SPY/';

// Making the GET request to the API
https.get(url, {
    headers: {
        'Accept': 'application/json',
        'Authorization': `Bearer ${token}`
    }
}, (response) => {
    let data = '';

    // A chunk of data has been received.
    response.on('data', (chunk) => {
        data += chunk;
    });

    // The whole response has been received. Print out the result.
    response.on('end', () => {
        if (response.statusCode === 200 || response.statusCode === 203) {
            console.log(JSON.parse(data));
        } else {
            console.log(`Failed to retrieve data: ${response.statusCode}`);
        }
    });
}).on("error", (err) => {
    console.log("Error: " + err.message);
});
```

</TabItem>

<TabItem value="Python" label="Python">

```python
from marketdata.client import MarketDataClient

# Initialize the client (token is read from MARKETDATA_TOKEN environment variable)
# Or pass it directly: client = MarketDataClient(token="your_token_here")
client = MarketDataClient()

# Get stock quotes for SPY
quotes = client.stocks.quotes("SPY")
print(quotes)
```

For more information about using the Python SDK, see our [Python SDK documentation](/sdk/py) and [authentication guide](/sdk/py/authentication).

</TabItem>


<TabItem value="Go" label="Go">

```go
// Import the Market Data SDK
import api "github.com/MarketDataApp/sdk-go"

func main() {
    // Create a new Market Data client instance
    marketDataClient := api.New()

    // Set the token for authentication
    // Replace "your_token_here" with your actual token
    marketDataClient.Token("your_token_here")

    // Now the client is ready to make authenticated requests to the Market Data API
    
    // Use the client to create a StockQuoteRequest
	sqr, err := api.StockQuote(marketDataClient).Symbol("SPY").Get()
    if err != nil {
		fmt.Println("Error fetching stock quotes:", err)
		return
	}

	// Process the retrieved quote
	for _, quote := range quotes {
		fmt.Printf(quote)
	}
}
```

</TabItem>
</Tabs>


## URL Parameter Authentication

Add the token as a variable directly in the URL using the format ```token=YOUR_TOKEN_HERE```. For example:

```
https://api.marketdata.app/v1/stocks/quotes/SPY/?token={token}
```

:::tip
The curly braces around token are a placeholder for this example. Do not actually wrap your token with curly braces. 
:::

## Demo The API With No Authentication

You can try stock, option, and index endpoints with several different symbols that are unlocked and do not require a token. Please be aware that only historical data for these tickers is available without a token.

- Try any stock endpoint with **AAPL**, no token required.
- Try any option endpoint with any AAPL contract, for example: **AAPL271217C00250000**. No token required.

## IP Address Restrictions

Due to exchange regulations prohibiting data redistribution without a commercial license, Market Data strictly enforces a single device policy. This means:

1. Only one IP address is allowed per account at any given time
2. Multiple simultaneous connections from different IP addresses are not permitted
3. Account sharing or data redistribution is strictly prohibited

If your IP address changes, your account will be temporarily blocked for security reasons, even if you are authenticated. This is to prevent unauthorized data redistribution and ensure compliance with exchange regulations. Please wait 5 minutes before trying again.

:::warning
Attempting to circumvent these restrictions by sharing accounts or redistributing data will result in permanent account suspension.
:::
