Field changes old to new API
If you're migrating off the old api.fantastic.jobs / RapidAPI endpoints, this page is the field-by-field cheat sheet. It covers response field names only - parameter renames are documented in the Changelog.
The change set falls into four buckets:
- Renamed - same data, new name. Update your field references.
- Removed - field no longer returned.
- Type changed - field name unchanged, JSON type different.
- New - field didn't exist in the old API.
Renamed fields
Snake_case fixes
The old API had a few inconsistently-cased compound names. They're now properly snake_cased.
| Old name | New name |
|---|---|
date_validthrough | date_valid_through |
ai_salary_minvalue | ai_salary_min_value |
ai_salary_maxvalue | ai_salary_max_value |
ai_salary_unittext | ai_salary_unit_text |
linkedin_org_foundeddate | org_linkedin_founded_date (also covered by the LinkedIn rename below) |
_raw suffix dropped
The _raw suffix was dropped on source-supplied fields. The naming convention is now: bare name = source-of-truth as supplied by the ATS / job board, _derived = normalized by us, ai_* = AI-extracted, org_* = organization context. The data itself is unchanged.
| Old name | New name |
|---|---|
locations_raw | locations |
locations_alt_raw | locations_alt |
location_requirements_raw | location_requirements |
salary_raw | salary |
LinkedIn organization fields (linkedin_org_* → org_linkedin_*)
All LinkedIn-derived organization fields were re-prefixed so every organization-related field starts with org_. Two of them also got a semantic rename to better reflect what they actually contain.
| Old name | New name | Notes |
|---|---|---|
linkedin_org_employees | org_linkedin_headcount | Renamed for clarity (it's a single integer, not a list of employees). |
linkedin_org_url | org_linkedin_website | Renamed because the value is the company's main website (e.g. https://example.com), not the LinkedIn profile URL. The actual LinkedIn profile URL is now exposed as a separate field on organizations-advanced (also called org_linkedin_url there). |
linkedin_org_size | org_linkedin_size | |
linkedin_org_slogan | org_linkedin_slogan | |
linkedin_org_industry | org_linkedin_industry | |
linkedin_org_followers | org_linkedin_followers | |
linkedin_org_headquarters | org_linkedin_headquarters | |
linkedin_org_type | org_linkedin_type | |
linkedin_org_foundeddate | org_linkedin_founded_date | |
linkedin_org_specialties | org_linkedin_specialties | |
linkedin_org_locations | org_linkedin_locations | |
linkedin_org_description | org_linkedin_description | |
linkedin_org_slug | org_linkedin_slug | Now always returned (regardless of include_basic_organization_details) so jobs can be joined to organizations-advanced. |
linkedin_org_recruitment_agency_derived | org_linkedin_recruitment_agency_derived |
Other renames
| Old name | New name | Notes |
|---|---|---|
ai_education_requirements | ai_education | Same enum values, shorter name. |
directapply | direct_apply | active-jb only. Snake_case fix. The query parameter was renamed to match. |
Removed fields
These are no longer returned in any response. If you were depending on them, see the replacement column for what to use instead.
| Old name | Endpoints | Replacement |
|---|---|---|
remote_derived | ATS, JB | Use ai_work_arrangement (enum: Remote Solely | Remote OK | Hybrid | On-site). The new field is AI-derived from the full job description rather than keyword-matching, so it covers cases the old field missed. |
external_apply_url | JB | LinkedIn no longer exposes a separate external apply URL, so we can't populate this field anymore. Use the job's url as the apply entry point, and direct_apply as the signal for whether the listing supports in-platform application (LinkedIn Easy Apply). |
The response field organization_logo is not removed but is now deprecated on active-ats and modified-ats. Use org_logo_permalink instead - it's a Crustdata-hosted permanent URL returned when include_basic_organization_details=true. organization_logo continues to be returned for now, and remains the primary logo field on active-jb.
Type changes
| Field | Endpoints | Old type | New type | Notes |
|---|---|---|---|---|
id | ATS, JB, modified, expired | string | integer (int64 / bigint) | The internal Fantastic.jobs ID is now a JSON number rather than a stringified number. |
linkedin_id | JB | string | integer (int64) | LinkedIn's public job posting ID. The numeric value itself is unchanged. |
New fields
These are returned by the new API but did not exist on the old endpoints.
active-ats and modified-ats
All four are part of the basic organization-details set and are returned when include_basic_organization_details=true. They are populated for newly indexed jobs only while the backfill across the time_frame=6m window is in progress.
| Field | Description |
|---|---|
org_linkedin_name | Canonical company name from LinkedIn (separate from the source-supplied organization). |
org_crunchbase_categories | List of Crunchbase categories the company is tagged with. |
org_crunchbase_total_investment | Total investment in USD raised by the company according to Crunchbase. |
org_logo_permalink | Stable Crustdata-hosted URL for the company logo. |
active-jb
| Field | Description |
|---|---|
ai_employment_type | AI-derived employment type (enum: FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, OTHER). Was previously only available on the ATS endpoints; now exposed on JB as well for consistency. |
See also
- ATS vs Job Board Fields - which fields exist on which active-jobs endpoint
- Changelog - the full v0.9 change set, including parameter renames