# 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](/changelog).

The change set falls into four buckets:

1. **Renamed** - same data, new name. Update your field references.
2. **Removed** - field no longer returned.
3. **Type changed** - field name unchanged, JSON type different.
4. **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](/documentation/ats-vs-jb-fields) - which fields exist on which active-jobs endpoint
- [Changelog](/changelog) - the full v0.9 change set, including parameter renames
