# Quickstart

Three steps from zero to your first successful call: subscribe, copy your key, call the API.

Pick the API you need:

- [Job Postings API](#jobs): Search the last 3 months of job postings from 185 sources in 250 countries & territories. Returns JSON (or CSV, RSS, Atom, XML, Parquet).
- [Job Postings RSS Feed API](#rss): Job postings as RSS/XML feeds, e.g. for job board backfill. The key goes into the feed URL, so the feed can be pasted into any job board importer.

## Job Postings API

### Quickstart (RapidAPI)

1. **Subscribe to the Basic plan** of the [Job Postings API on RapidAPI](https://rapidapi.com/techmap-io-techmap-io-default/api/daily-international-job-postings/pricing). It has no hard monthly limit - requests above the included quota are billed as overage (see [Errors & billing](https://api.techmap.io/errors-and-billing)).
2. **Copy your key** from the [RapidAPI listing](https://rapidapi.com/techmap-io-techmap-io-default/api/daily-international-job-postings) → *Endpoints* tab → code snippet → value of `X-RapidAPI-Key` - one key per RapidAPI application.
3. **Make your first call.** Replace `YOUR_API_KEY` with your key. A successful call returns HTTP **200**.

#### curl

```bash
curl --request GET \
  --url 'https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search?countryCode=us&title=developer' \
  --header 'X-RapidAPI-Key: YOUR_API_KEY' \
  --header 'X-RapidAPI-Host: daily-international-job-postings.p.rapidapi.com'
```

#### Python

```python
import requests

url = "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search"
params = {"countryCode": "us", "title": "developer"}
headers = {
    "X-RapidAPI-Key": "YOUR_API_KEY",
    "X-RapidAPI-Host": "daily-international-job-postings.p.rapidapi.com",
}

response = requests.get(url, params=params, headers=headers, timeout=30)
response.raise_for_status()
print(response.json())
```

#### JavaScript

```javascript
// Node.js 18+ or browser
const url = new URL('https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search');
url.search = new URLSearchParams({ 'countryCode': 'us', 'title': 'developer' });

const response = await fetch(url, {
  headers: {
    'X-RapidAPI-Key': 'YOUR_API_KEY',
    'X-RapidAPI-Host': 'daily-international-job-postings.p.rapidapi.com',
  },
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
console.log(await response.json());
```

#### Java

```java
// Java 11+
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class TechmapExample {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/search?countryCode=us&title=developer"))
            .header("X-RapidAPI-Key", "YOUR_API_KEY")
            .header("X-RapidAPI-Host", "daily-international-job-postings.p.rapidapi.com")
            .GET()
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() != 200) throw new RuntimeException(response.statusCode() + ": " + response.body());
        System.out.println(response.body());
    }
}
```

Getting an error instead? See [Errors & billing](https://api.techmap.io/errors-and-billing).

### How to authenticate

Requests are authenticated and billed by the marketplace you subscribe through. The base URL, the key and the plans depend on that marketplace.

#### RapidAPI

- **Base URL:** `https://daily-international-job-postings.p.rapidapi.com`
- **Key:** header `X-RapidAPI-Key: YOUR_API_KEY`
- **Host (optional):** header `X-RapidAPI-Host: daily-international-job-postings.p.rapidapi.com`
- **Alternative:** query parameter `rapidapi-key=YOUR_API_KEY` in the URL instead of the header
- **Where to find the key:** [RapidAPI listing](https://rapidapi.com/techmap-io-techmap-io-default/api/daily-international-job-postings) → *Endpoints* tab → code snippet → value of `X-RapidAPI-Key` - one key per RapidAPI application (see [RapidAPI docs](https://docs.rapidapi.com/docs/keys-and-key-rotation)).
- **Plans and prices:** [RapidAPI pricing page](https://rapidapi.com/techmap-io-techmap-io-default/api/daily-international-job-postings/pricing)
- Calling the backend directly (without RapidAPI) returns **401**.

Full reference: [Job Postings API](/jobs-api)

## Job Postings RSS Feed API

### Quickstart (RapidAPI)

1. **Subscribe to the Basic plan** of the [Job Postings RSS Feed API on RapidAPI](https://rapidapi.com/techmap-io-techmap-io-default/api/job-postings-rss-feed/pricing). It has no hard monthly limit - requests above the included quota are billed as overage (see [Errors & billing](https://api.techmap.io/errors-and-billing)).
2. **Copy your key** from the [RapidAPI listing](https://rapidapi.com/techmap-io-techmap-io-default/api/job-postings-rss-feed) → *Endpoints* tab → code snippet → value of `X-RapidAPI-Key` - one key per RapidAPI application.
3. **Make your first call.** Replace `YOUR_API_KEY` in the URL with your key. A successful call returns HTTP **200**.

#### curl

```bash
curl --request GET \
  --url 'https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?countryCode=us&title=developer&rapidapi-key=YOUR_API_KEY'
```

#### Python

```python
import requests

url = "https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full"
params = {"countryCode": "us", "title": "developer", "rapidapi-key": "YOUR_API_KEY"}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
print(response.text)  # RSS/XML feed
```

#### JavaScript

```javascript
// Node.js 18+ or browser
const url = new URL('https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full');
url.search = new URLSearchParams({ 'countryCode': 'us', 'title': 'developer', 'rapidapi-key': 'YOUR_API_KEY' });

const response = await fetch(url);
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
console.log(await response.text()); // RSS/XML feed
```

#### Java

```java
// Java 11+
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class TechmapExample {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?countryCode=us&title=developer&rapidapi-key=YOUR_API_KEY"))
            .GET()
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        if (response.statusCode() != 200) throw new RuntimeException(response.statusCode() + ": " + response.body());
        System.out.println(response.body()); // RSS/XML feed
    }
}
```

Getting an error instead? See [Errors & billing](https://api.techmap.io/errors-and-billing).

### How to authenticate

Requests are authenticated and billed by the marketplace you subscribe through. The base URL, the key and the plans depend on that marketplace.

#### RapidAPI

- **Base URL:** `https://job-postings-rss-feed.p.rapidapi.com`
- **Key:** query parameter `rapidapi-key=YOUR_API_KEY` in the request URL - no header needed. This lets you paste the feed URL into any job board importer that only accepts a URL.
- **Where to find the key:** [RapidAPI listing](https://rapidapi.com/techmap-io-techmap-io-default/api/job-postings-rss-feed) → *Endpoints* tab → code snippet → value of `X-RapidAPI-Key` - one key per RapidAPI application (see [RapidAPI docs](https://docs.rapidapi.com/docs/keys-and-key-rotation)).
- **Plans and prices:** [RapidAPI pricing page](https://rapidapi.com/techmap-io-techmap-io-default/api/job-postings-rss-feed/pricing)
- Calling the backend directly (without RapidAPI) returns **401**.

Full reference: [Job Postings RSS Feed API](/rss-api)
