## Overview  
Below are some useful resources to help you get started working with Kevel.

| Link | Description |
| --- | --- |
| **[Getting Started Guide](https://dev.kevel.co/docs/general-set-up-guide)** | Detailed instructions for launching a test ad. |
| **[Kevel Knowledge Base](https://dev.kevel.co/docs/welcome)** | Our Knowledge Base containing instructions and descriptions of all of our features. |
| **[Kevel Glossary](https://dev.kevel.co/docs/kevel-glossary)** | A list of relevant Kevel-specific terms. |
| **[Ad Tech Glossary](https://www.kevel.com/blog/advertising-terms/)** | A list of relevant Ad Tech industry terms. |
| **[Ad Servers: The Definitive Guide](/content/blog/what-is-an-ad-server/index.html)** | A description of an ad server. |
| **[Kevel Audience](https://docs.audience.kevel.com/)** | Technical content and documentation for the Kevel Audience product, including detailed information on data collection and segmentation. |

## Kevel APIs  
Kevel contains a full suite of APIs to build a customizable ad server. A brief overview of these APIs is below.

| API | Description |
| --- | --- |
| **[Decision API](https://dev.kevel.co/v1.0/reference/request)** | Calls Kevel's Ad Decision Engine to fill an ad request. Returns JSON so you can construct a customized ad unit |
| **[Reporting API](https://dev.kevel.co/v1.0/reference/reporting-api-overview)** | Pulls reporting data directly into your system |
| **[Campaign Management API](https://dev.kevel.co/v1.0/reference/campaign-api-overview)** | Automatically creates/updates campaigns and ads in bulk |
| **[Inventory Management API](https://dev.kevel.co/v1.0/reference/inventory-api-overview)** | Automatically creates/updates web properties in bulk |
| **[UserDB API](https://dev.kevel.co/v1.0/reference/userdb)** | A server-side database for storing user-level information. Learn more [here](https://dev.kevel.co/docs/userdb-1). |
| **[Content DB API](https://dev.kevel.co/v1.0/reference/contentdb)** | A server-side database for storing metadata for contextual targeting. Learn more [here](https://dev.kevel.co/docs/contentdb-1). |
| **[Forecast API](https://dev.kevel.com/reference/get_forecaster)** | Generates and pulls inventory and campaign Forecast reports |

## Domain  
The base domain of the Management API is `https://api.kevel.co/`. Management API endpoints use /v1/, such as `https://api.kevel.co/v1/site`.

## Authenticating Requests  
To authenticate with the Kevel API, the API Key must be passed as a header with the name `X-Adzerk-ApiKey` or `X-Kevel-ApiKey`, the two may be used interchangeably.

Authenticating cURL

```curl
curl -X GET -H 'X-Kevel-ApiKey:1234567890ABCDEF1234567890ABCDEF'
```

All API requests **must** use TLS to protect your API key.

Some endpoints, such as the Decision API, do not require API Key authentication. For added security, Kevel has the option to require API Key authentication for the Decision API. Please reach out to your CSM or [support@kevel.co](mailto:support@kevel.co) to enable API access.

You have the option to enable API Key authentication for the following:

**Decision Requests**: Once enabled, requests to the Decision API will not return a decision without a valid API Key sent in the request header.

**EventURL**: Once enabled, EventURLs will not count towards reported metrics without a valid API Key sent in with the EventURL request.

**UserDB**: Once enabled, requests to UserDB will not succeed without a valid API Key sent in with the request.

Once enabled, the API Key must be passed as a header with the name `X-Kevel-ApiKey`.

Requests lacking the header, or requests with an invalid API Key for the network, will be rejected with a 401 HTTP status.

## Payload and Content-Type  
The data payload for POST and PUT endpoints is in JSON format. The `Content-Type` for these endpoints is `application/json`, which should be passed as a header in your requests:

Content-Type header

```curl
curl -X POST -H 'X-Kevel-ApiKey:1234567890ABCDEF1234567890ABCDEF' -H 'Content-Type:application/json'
```

In curl, the JSON payload should be passed via the `--data-binary` flag:

Passing JSON data payload

```curl
curl -X POST -H 'X-Kevel-ApiKey:1234567890ABCDEF1234567890ABCDEF' -H 'Content-Type:application/json' https://api.kevel.co/v1/site --data-binary '{"Title":"Adzerk","URL":"https://adzerk.com"}'
```

When updating objects, we recommend you pass the entire contents of the object as the payload; otherwise, some values may be set to `null`.

We also recommend using the GET endpoint to capture the current state of the object before updating.
