SOCIAL MEDIA

Wellfound Job Detail API

Fetch one Wellfound job listing in full (description, skills, compensation, equity, remote configuration, locations) together with the hiring company, including funding stage and total raised. Read-only, and works with an anonymous session from wellfound-public-session. An expired or removed listing is reported as such rather than returned as an empty job.

wellfoundjobspublic
Try it freeGet an API key

How to call it

Send one POST to api.upapi.io/wellfound-job-detail.post with your key in the X-Api-Key header and the parameters below as a JSON body. Each call spends 6 weighted units of your monthly quota. The operation times out after 30 seconds. Responses are not cached; every call runs the operation.

endpoint
POST https://api.upapi.io/wellfound-job-detail.post

Wellfound Job Detail API reference

Request parameters

slug
string — Listing slug, used for the URL and referer.
jobId
stringrequired — Wellfound job listing id.
session
stringrequired — Blob from wellfound-public-session (anonymous) or wellfound-login.
proxyUrl
string — Same exit the session was minted on. Omit to send directly.

Response fields

job
objectrequired
job.id
stringrequired
job.slug
string
job.title
string
job.equity
string
job.jobUrl
string — Canonical listing page, https://wellfound.com/jobs/<id>-<slug>. Empty when Wellfound disclosed no slug, because both halves are required: the id alone 404s.
job.remote
boolean — True or False as Wellfound disclosed it; null when it did not.
job.skills
array
job.jobType
string
job.startupId
string
job.description
string
job.liveStartAt
integer
job.compensation
string
job.locationNames
array
job.descriptionHtml
string
job.remoteConfigKind
string — REMOTE, ONSITE or ONSITE_OR_REMOTE, read from remoteConfig. Empty when undisclosed, which the anonymous surface often is.
job.currentUserApplied
boolean — Always false on an anonymous session.
job.yearsExperienceMax
integer
job.yearsExperienceMin
integer
job.acceptedRemoteLocations
array
job.currentUserQualificationReport
object — Empty on an anonymous session.
company
object
company.id
string
company.name
string
company.slug
string
company.perks
array
company.logoUrl
string
company.marketTags
array
company.companySize
string
company.highConcept
string
company.totalRaised
string
company.founderNames
array
company.fundingStage
string
company.locationTags
array
company.productDescription
string
session
string — Refreshed blob carrying rotated cookies. Persist THIS one, not the input.

Example request and response

The example response is generated from this operation’s published output schema — it shows the shape and field names, not values from a recorded call.

json — example request body
{
  "slug": "",
  "jobId": "example",
  "session": "example"
}
json — example response shape
{
  "job": {
    "id": "example",
    "slug": "",
    "title": "",
    "equity": "",
    "jobUrl": "",
    "remote": false,
    "skills": [
      "example"
    ],
    "jobType": "",
    "startupId": "",
    "description": "",
    "liveStartAt": 1,
    "compensation": "",
    "locationNames": [
      "example"
    ],
    "descriptionHtml": "",
    "remoteConfigKind": "",
    "currentUserApplied": false,
    "yearsExperienceMax": 1,
    "yearsExperienceMin": 1,
    "acceptedRemoteLocations": [
      "example"
    ],
    "currentUserQualificationReport": {}
  },
  "company": {
    "id": "",
    "name": "",
    "slug": "",
    "perks": [
      "example"
    ],
    "logoUrl": "",
    "marketTags": [
      "example"
    ],
    "companySize": "",
    "highConcept": "",
    "totalRaised": "",
    "founderNames": [
      "example"
    ],
    "fundingStage": "",
    "locationTags": [
      "example"
    ],
    "productDescription": ""
  },
  "session": ""
}

Code snippets

cURL
curl
curl -X POST https://api.upapi.io/wellfound-job-detail.post \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: YOUR_API_KEY' \
  -d '{ "slug": "", "jobId": "example", "session": "example" }'
JavaScript
javascript
const response = await fetch('https://api.upapi.io/wellfound-job-detail.post', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': 'YOUR_API_KEY',
  },
  body: JSON.stringify({
  "slug": "",
  "jobId": "example",
  "session": "example"
}),
});

const data = await response.json();
console.log(data);
Python
python
import requests

response = requests.post(
    'https://api.upapi.io/wellfound-job-detail.post',
    headers={
        'Content-Type': 'application/json',
        'x-api-key': 'YOUR_API_KEY',
    },
    json={
  "slug": "",
  "jobId": "example",
  "session": "example"
},
)

print(response.json())
Go
go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

func main() {
	payload := []byte(`{ "slug": "", "jobId": "example", "session": "example" }`)

	req, _ := http.NewRequest("POST", "https://api.upapi.io/wellfound-job-detail.post", bytes.NewBuffer(payload))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	var result map[string]any
	json.Unmarshal(body, &result)
	fmt.Println(result)
}
PHP
php
<?php

$payload = json_encode([
    'slug' => '',
    'jobId' => 'example',
    'session' => 'example',
]);

$ch = curl_init('https://api.upapi.io/wellfound-job-detail.post');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'x-api-key: YOUR_API_KEY',
    ],
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
var_dump($data);
Ruby
ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.upapi.io/wellfound-job-detail.post')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['x-api-key'] = 'YOUR_API_KEY'
request.body = { "slug": "", "jobId": "example", "session": "example" }.to_json

response = http.request(request)
puts JSON.parse(response.body)
Java
java
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

OkHttpClient client = new OkHttpClient();
ObjectMapper mapper = new ObjectMapper();

String json = "{ \"slug\": \"\", \"jobId\": \"example\", \"session\": \"example\" }";

RequestBody body = RequestBody.create(json, MediaType.get("application/json"));
Request request = new Request.Builder()
    .url("https://api.upapi.io/wellfound-job-detail.post")
    .post(body)
    .addHeader("Content-Type", "application/json")
    .addHeader("x-api-key", "YOUR_API_KEY")
    .build();

try (Response response = client.newCall(request).execute()) {
    Map<?, ?> result = mapper.readValue(response.body().string(), Map.class);
    System.out.println(result);
}
C#
csharp
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var payload = JsonSerializer.Deserialize<object>("{ \"slug\": \"\", \"jobId\": \"example\", \"session\": \"example\" }");
var response = await client.PostAsJsonAsync("https://api.upapi.io/wellfound-job-detail.post", payload);

var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);

Frequently asked questions

How much does the Wellfound Job Detail API cost per call?

Each call spends 6 weighted units of your plan's monthly quota. Full pricing is at https://upapi.io/pricing.

How do I authenticate to the Wellfound Job Detail API?

Send your key in the X-Api-Key header. A free guest key is available without creating an account.

Are Wellfound Job Detail API responses cached?

No — every call runs the operation live; responses are not cached.

More Social Media APIs

Browse every Social Media API →