Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ericcobasdev/careertrack-api/llms.txt

Use this file to discover all available pages before exploring further.

A job application is the primary resource in CareerTrack. Each record represents a single position you’ve applied to and captures everything relevant to that application: the company and role you targeted, where you found the listing, your current status in the process, salary expectations, location, personal notes, and key dates such as when you applied and when your next step is due. Every application is privately owned by the authenticated user who created it and cannot be accessed by other accounts.

Fields overview

The table below documents every field exposed by the API. Required fields must be provided when creating an application; all other fields are optional.
FieldTypeRequiredDefaultDescription
idintegerautoAuto-incrementing primary key assigned by the database.
user_idintegerauth userForeign key referencing the users table. Set automatically from the authenticated session.
company_namestring (max 255)The name of the company you applied to.
position_titlestring (max 255)The title of the role you applied for.
statusenum stringappliedCurrent stage of the application. One of applied, interview, technical_test, offer, or rejected. See Application Statuses.
sourcestring (max 255)nullWhere you discovered the listing, e.g. LinkedIn, Indeed, Company website.
source_urlstring / URL (max 255)nullDirect URL to the job posting. Must be a valid URL when provided.
salary_mininteger ≥ 0nullLower bound of the expected salary range (in your local currency unit).
salary_maxinteger ≥ 0nullUpper bound of the expected salary range.
locationstring (max 255)nullLocation of the role, e.g. Remote, New York, NY, London, UK.
notestextnullFree-form notes about the application — recruiter names, impressions, follow-up reminders.
applied_atdate (YYYY-MM-DD)nullThe date you submitted the application.
next_step_atdatetime (ISO 8601)nullThe date and time of an upcoming step, such as an interview or assignment deadline.
created_atdatetime (ISO 8601)autoTimestamp set automatically when the record is first created.
updated_atdatetime (ISO 8601)autoTimestamp updated automatically whenever the record changes.

JSON representation

The API returns job applications using JobApplicationResource, which serialises every field to JSON. Below is a realistic example of a single application object as returned by the API:
{
  "id": 42,
  "user_id": 7,
  "company_name": "Acme Corp",
  "position_title": "Senior Backend Engineer",
  "status": "interview",
  "source": "LinkedIn",
  "source_url": "https://www.linkedin.com/jobs/view/3987654321",
  "salary_min": 120000,
  "salary_max": 150000,
  "location": "Remote",
  "notes": "Spoke with recruiter Sarah on Monday. Technical interview scheduled for next week.",
  "applied_at": "2026-04-01",
  "next_step_at": "2026-04-10T14:00:00.000000Z",
  "created_at": "2026-04-01T09:23:11.000000Z",
  "updated_at": "2026-04-04T16:45:00.000000Z"
}
List endpoints wrap results in a data array. Single-resource endpoints return the object directly under a data key.

User ownership

Every job application belongs to exactly one user. The JobApplication model expresses this with a BelongsTo relationship:
public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}
The corresponding user_id foreign key in the database is defined with cascadeOnDelete, which means that if a user account is deleted, all of their job applications are automatically removed as well — no orphaned records are left behind. Because the API is protected by Laravel Sanctum, user_id is never accepted as a request parameter. The value is always derived from the bearer token presented in the Authorization header, so one user can never read or modify another user’s applications.

Filtering

The JobApplication model defines a scopeFilter query scope with four filter parameters. This scope is available for use on queries against the model:
public function scopeFilter(Builder $query, array $filters): Builder
{
    return $query
        ->when($filters['status'] ?? null, fn ($q, $status) => $q->where('status', $status))
        ->when($filters['company'] ?? null, fn ($q, $company) => $q->where('company_name', 'like', "%{$company}%"))
        ->when($filters['from'] ?? null, fn ($q, $from) => $q->whereDate('applied_at', '>=', $from))
        ->when($filters['to'] ?? null, fn ($q, $to) => $q->whereDate('applied_at', '<=', $to));
}
The four supported filter parameters are:
Query parameterBehaviour
statusExact match on the status field. Must be a valid enum value.
companyCase-insensitive partial match (LIKE %value%) on company_name.
fromReturns only applications where applied_at is on or after this date (YYYY-MM-DD).
toReturns only applications where applied_at is on or before this date (YYYY-MM-DD).

Related pages:

Build docs developers (and LLMs) love