JOB TODAY: Hire & Find Jobs icon

JOB TODAY data API: jobs, chat and hiring credits

JOB TODAY S.A. · Jobs & Careers

JOB TODAY is a same-day hiring app for hospitality, retail and local services. After phone or email login mints an X-Session-Token, the client loads vacancies, applications, chat and the employer hiring-credit wallet over a first-party JSON API.

The vacancy spine is GET /v1/jobs/nearby-feed (jobTitle, salary, immediateStart) plus GET /v1/geo/vacancies for the pin overlay. Jobseekers write POST /v1/applications/create and read GET /v1/applications/status/{id}; employers page GET /v1/hiring/threads and GET /v1/candidates/suggested. Chat lives at GET /v1/messages/threads, interviews at GET /v1/schedule/slots, and the paid-contact wallet at GET /v1/wallet/credits.

JOB TODAY: Hire & Find Jobs (package com.jobtoday.app, version 2.117.0) is JOB TODAY S.A.'s Android client for same-day hiring in hospitality, retail and local services. Jobseekers browse a map-backed feed, one-tap apply and chat with employers; employers search candidates, unlock paid chats and spend hiring credits from an in-app bank. Signed-in calls attach an X-Session-Token header minted at phone-number or email login. The surface below covers mobile search, map jobs, applications, profiles and CVs, employer inbox, chat, recommended candidates, interviews and the hiring-credit bank.

Screenshots

  • JOB TODAY: Hire & Find Jobs screenshot 1
  • JOB TODAY: Hire & Find Jobs screenshot 2
  • JOB TODAY: Hire & Find Jobs screenshot 3
  • JOB TODAY: Hire & Find Jobs screenshot 4
  • JOB TODAY: Hire & Find Jobs screenshot 5
  • JOB TODAY: Hire & Find Jobs screenshot 6
  • JOB TODAY: Hire & Find Jobs screenshot 7

API surface

  • Phone-number login session

    POST /v1/auth/phone/session opendata

    Mints the X-Session-Token used after SMS login on the employer phone-number flow.

    Auth: None. Returns sessionToken used as X-Session-Token on later calls.

    • sessionToken
    • id
    • firstName
    • email
    • userExperience
    • phoneNumber
    • code

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/auth/phone/session HTTP/1.1
    Content-Type: application/json
    Accept: application/json
    
    {
      "phoneNumber": "+34600111222",
      "code": "482913",
      "userExperience": "employer"
    }
    {
      "sessionToken": "st_7f3a9c2e1b",
      "id": "usr_4412",
      "firstName": "Elena",
      "email": "[email protected]",
      "userExperience": "employer",
      "phoneNumber": "+34600111222"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the employer phone-number login screen
    • Session payload carries sessionToken, userExperience, firstName and email
  • Email password login

    POST /v1/auth/email/session opendata

    Email/password sign-in used alongside SSO and phone flows on the authorization screen.

    Auth: None. Returns sessionToken used as X-Session-Token.

    • email
    • password
    • userExperience
    • sessionToken
    • id
    • firstName

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/auth/email/session HTTP/1.1
    Content-Type: application/json
    Accept: application/json
    
    {
      "email": "[email protected]",
      "password": "********",
      "userExperience": "jobseeker"
    }
    {
      "sessionToken": "st_9c1d4e77",
      "id": "usr_8801",
      "firstName": "Alex",
      "email": "[email protected]",
      "userExperience": "jobseeker"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the email sign-in screen
    • Same sessionToken shape as the phone-number login response
  • Universal mobile search

    GET /v1/jobs/nearby-feed opendata

    Powers the jobseeker feed: name query, geo radius and filters (immediateStart, employmentTypes) return vacancy cards with salary, shift and urgency.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • jobs
    • id
    • uuid
    • jobTitle
    • normalizedTitle
    • companyName
    • companyId
    • city
    • latitude
    • longitude
    • salary
    • currency
    • employmentType
    • shift
    • immediateStart
    • isUrgent
    • jobStatus
    • applicantsCount
    • cursor
    • pageSize

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/jobs/nearby-feed?name=waiter&lat=41.3874&lng=2.1686&radius=12&filters.immediateStart=true&filters.employmentTypes=PART_TIME HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Accept: application/json
    {
      "jobs": [{
        "id": "job_55102",
        "uuid": "8c2e1b44-7a11-4d90-9f3a-21b0c8e44aa1",
        "jobTitle": "Waiter / Waitress",
        "normalizedTitle": "waiter",
        "companyName": "Cafe Example",
        "companyId": "co_118",
        "city": "Barcelona",
        "latitude": 41.3874,
        "longitude": 2.1686,
        "salary": "12 EUR/hour",
        "currency": "EUR",
        "employmentType": "PART_TIME",
        "shift": "evening",
        "immediateStart": true,
        "isUrgent": true,
        "jobStatus": "open",
        "applicantsCount": 14
      }],
      "cursor": "eyJvIjoxOH0",
      "pageSize": 20
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the universal feed and search tab
    • Feed cards expose salary, shift, immediateStart and isUrgent
  • Map jobs

    GET /v1/geo/vacancies opendata

    Feeds the map overlay: jobs near a lat/lng with geoPoint and distance.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • jobs
    • id
    • jobTitle
    • companyName
    • latitude
    • longitude
    • geoPoint
    • lat
    • lng
    • salary
    • currency
    • isUrgent
    • distance

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/geo/vacancies?lat=40.7580&lng=-73.9855&radius=8&zoom=14 HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Accept: application/json
    {
      "jobs": [{
        "id": "job_77021",
        "jobTitle": "Barista",
        "companyName": "Example Roasters",
        "latitude": 40.7589,
        "longitude": -73.9851,
        "geoPoint": {"lat": 40.7589, "lng": -73.9851},
        "salary": "18 USD/hour",
        "currency": "USD",
        "isUrgent": false,
        "distance": 0.4
      }]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the map search screen
    • Pin payload carries geoPoint, salary and distance
  • Submit job application

    POST /v1/applications/create opendata

    One-tap apply write from the job detail screen; creates an application entry the employer inbox later lists.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • id
    • uuid
    • jobId
    • candidateId
    • applicationStatus
    • status
    • createdAt
    • withJobApplicationsInfo

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/applications/create HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Content-Type: application/json
    
    {
      "jobId": "job_55102",
      "candidateId": "usr_8801",
      "withJobApplicationsInfo": true
    }
    {
      "id": "app_90112",
      "uuid": "b7e1f4f1-7144-4e9e-264f-346cd8e17e8a",
      "jobId": "job_55102",
      "candidateId": "usr_8801",
      "applicationStatus": "applied",
      "status": "applied",
      "createdAt": "2026-09-28T10:14:00Z"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the jobseeker apply action
    • Response carries applicationStatus and createdAt
  • Application status

    GET /v1/applications/status/{id} opendata

    Reads per-application pipeline state (applied / shortlisted / interviewed) for the jobseeker My Jobs list.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • uuid
    • jobId
    • jobTitle
    • companyName
    • applicationStatus
    • status
    • hasInterview
    • interviewId
    • createdAt

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/applications/status/b7e1f4f1-7144-4e9e-264f-346cd8e17e8a HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Accept: application/json
    {
      "uuid": "b7e1f4f1-7144-4e9e-264f-346cd8e17e8a",
      "jobId": "job_55102",
      "jobTitle": "Waiter / Waitress",
      "companyName": "Cafe Example",
      "applicationStatus": "shortlisted",
      "status": "shortlisted",
      "hasInterview": true,
      "interviewId": "int_332",
      "createdAt": "2026-09-28T10:14:00Z"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the My Jobs application-status list
    • Payload includes hasInterview and interviewId when a slot is booked
  • Jobseeker profile

    GET /v1/seekers/me osint

    Loads jobseeker profile fields: name, photo, availability, CV pointer and verificationStatus.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • id
    • firstName
    • lastName
    • fullName
    • email
    • phoneNumber
    • photoUrl
    • city
    • availability
    • immediateStart
    • cv
    • url
    • verificationStatus
    • userExperience

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/seekers/me HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Accept: application/json
    {
      "id": "usr_8801",
      "firstName": "Alex",
      "lastName": "Garcia",
      "fullName": "Alex Garcia",
      "email": "[email protected]",
      "phoneNumber": "+13475550100",
      "photoUrl": "https://cdn.example.com/u/8801.jpg",
      "city": "New York",
      "availability": "immediate",
      "immediateStart": true,
      "cv": {"url": "https://cdn.example.com/cv/8801.pdf"},
      "verificationStatus": "verified",
      "userExperience": "jobseeker"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the jobseeker profile and profile-editing screens
    • Profile payload includes availability, cv and verificationStatus
  • Profile CV PDF

    GET /v1/documents/cv osint

    Downloads or locates the jobseeker CV PDF used by CV import and the employer candidate view.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • url
    • cv
    • fullName
    • email
    • phoneNumber

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/documents/cv HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Accept: application/pdf
    {
      "url": "https://cdn.example.com/cv/8801.pdf",
      "cv": "8801.pdf",
      "fullName": "Alex Garcia",
      "email": "[email protected]",
      "phoneNumber": "+13475550100"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the CV import screen
    • Response locates the PDF plus fullName and contact fields
  • Chat inbox

    GET /v1/messages/threads opendata

    Pages jobseeker messenger threads; a query parameter filters the list.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • conversations
    • conversationId
    • recipientId
    • displayName
    • lastMessage
    • messageText
    • unreadCount
    • isBlocked
    • jobTitle
    • jobId
    • unreadMessages

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/messages/threads?query= HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Accept: application/json
    {
      "conversations": [{
        "conversationId": "chat_441",
        "recipientId": "usr_8801",
        "displayName": "Alex Garcia",
        "lastMessage": "I can start Monday",
        "messageText": "I can start Monday",
        "unreadCount": 2,
        "isBlocked": false,
        "jobTitle": "Waiter / Waitress",
        "jobId": "job_55102"
      }],
      "unreadMessages": 6
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the chat inbox and messenger screens
    • Thread cards carry unreadCount, lastMessage and jobTitle
  • Employer inbox

    GET /v1/hiring/threads opendata

    Loads employer applicant threads; companion search and filter calls apply shortlisted/interview/online facets.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • items
    • conversationId
    • candidateId
    • fullName
    • jobId
    • jobTitle
    • applicationStatus
    • unreadCount
    • hasInterview
    • photoUrl

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/hiring/threads HTTP/1.1
    X-Session-Token: st_7f3a9c2e1b
    Accept: application/json
    {
      "items": [{
        "conversationId": "chat_441",
        "candidateId": "usr_8801",
        "fullName": "Alex Garcia",
        "jobId": "job_55102",
        "jobTitle": "Waiter / Waitress",
        "applicationStatus": "applied",
        "unreadCount": 1,
        "hasInterview": false,
        "photoUrl": "https://cdn.example.com/u/8801.jpg"
      }]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the employer inbox, search and filter screens
    • Thread items include applicationStatus, unreadCount and hasInterview
  • Recommended candidates

    GET /v1/candidates/suggested opendata

    Employer recommended-candidates list of suggested jobseekers for a live posting.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • candidates
    • candidateId
    • fullName
    • photoUrl
    • city
    • availability
    • immediateStart
    • verificationStatus
    • jobId

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/candidates/suggested?jobId=job_55102 HTTP/1.1
    X-Session-Token: st_7f3a9c2e1b
    Accept: application/json
    {
      "candidates": [{
        "candidateId": "usr_8801",
        "fullName": "Alex Garcia",
        "photoUrl": "https://cdn.example.com/u/8801.jpg",
        "city": "Barcelona",
        "availability": "immediate",
        "immediateStart": true,
        "verificationStatus": "verified",
        "jobId": "job_55102"
      }]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the employer recommended-candidates screen
    • Cards expose availability, immediateStart and verificationStatus
  • Hiring-credit bank status

    GET /v1/wallet/credits openfinance

    Reads the employer hiring-credit bank (contacts/invites remaining, current plan) that gates paid chat unlocks and posting limits.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • meta
    • bank
    • balance
    • subscription
    • paid
    • packages
    • subscriptions
    • plan
    • productId
    • currency
    • specialOffers
    • menu
    • features

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/wallet/credits?include=menu,bank HTTP/1.1
    X-Session-Token: st_7f3a9c2e1b
    Accept: application/json
    {
      "meta": {
        "bank": {
          "balance": {
            "subscription": 12,
            "paid": true
          },
          "packages": {
            "subscriptions": [{
              "plan": "FAST",
              "productId": "emp.paid-chat.profile-widget.plan.weekly.v2",
              "currency": "EUR"
            }]
          },
          "specialOffers": []
        },
        "menu": {"features": ["paid-chat", "boost"]}
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the employer hiring-credit bank screen
    • Wallet payload nests bank.balance.subscription and packages.subscriptions
  • Interviews list

    GET /v1/schedule/slots opendata

    Lists upcoming and past interviews for the interviews list and the employer scheduler widget.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • interviews
    • interviewId
    • jobId
    • jobTitle
    • candidateId
    • fullName
    • interviewDate
    • interviewStatus
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/schedule/slots HTTP/1.1
    X-Session-Token: st_7f3a9c2e1b
    Accept: application/json
    {
      "interviews": [{
        "interviewId": "int_332",
        "jobId": "job_55102",
        "jobTitle": "Waiter / Waitress",
        "candidateId": "usr_8801",
        "fullName": "Alex Garcia",
        "interviewDate": "2026-09-30T16:00:00Z",
        "interviewStatus": "confirmed",
        "status": "confirmed"
      }]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the interviews list and employer scheduler screens
    • Each slot carries interviewDate and interviewStatus
  • Register device

    POST /v1/devices/register opendata

    Registers device guid, model, appVersion and FCM push tokens after login.

    Auth: X-Session-Token from phone or email login (sessionToken).

    • guid
    • type
    • model
    • systemVersion
    • appVersion
    • language
    • isSandboxToken
    • pushToken
    • fcmToken
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/devices/register HTTP/1.1
    X-Session-Token: st_9c1d4e77
    Content-Type: application/json
    
    {
      "guid": "a1b2c3d4-e5f6-7890",
      "type": 2,
      "model": "Pixel 8",
      "systemVersion": "15",
      "appVersion": "2.117.0",
      "language": "en",
      "isSandboxToken": false,
      "pushToken": "fcm-token",
      "fcmToken": "fcm-token"
    }
    {
      "guid": "a1b2c3d4-e5f6-7890",
      "type": 2,
      "appVersion": "2.117.0",
      "status": "ok"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from post-login device registration
    • Body carries guid, model, appVersion, pushToken and fcmToken

Data categories

  • job listings
  • applications
  • candidate profiles
  • CVs
  • employer inbox
  • chat
  • hiring credits
  • interviews

Where teams use this data

  • Local vacancy feed with salary and start flags

    A workforce dashboard can poll GET /v1/jobs/nearby-feed and GET /v1/geo/vacancies for jobTitle, salary, employmentType, immediateStart and geoPoint, then overlay same-day hospitality openings on a city map.

  • Application pipeline plus interview calendar

    HR tooling can POST /v1/applications/create, then watch GET /v1/applications/status/{id} and GET /v1/schedule/slots for applicationStatus, hasInterview, interviewDate and interviewStatus.

  • Employer inbox and recommended candidates

    A hiring desk can page GET /v1/hiring/threads (candidateId, unreadCount, applicationStatus) and hydrate GET /v1/candidates/suggested with verificationStatus and availability.

  • Hiring-credit bank reconciliation

    Finance bots can GET /v1/wallet/credits to read bank.balance.subscription and packages.subscriptions before an employer hits the monthly chat-unlock cap.

Frequently asked questions

How does JOB TODAY authenticate API calls?

Phone-number login at POST /v1/auth/phone/session or email login at POST /v1/auth/email/session returns a sessionToken. Later calls send it as the X-Session-Token header. Responses may include a data-center location hint so the client pins follow-up calls to the nearest region.

Which endpoints return job listings?

GET /v1/jobs/nearby-feed is the mobile feed (name, lat/lng, radius, immediateStart and employmentTypes filters). GET /v1/geo/vacancies returns the same vacancies as map pins with geoPoint and distance.

Where are hiring credits and chat unlocks?

GET /v1/wallet/credits returns bank.balance.subscription and packages.subscriptions. Employer chat unlocks spend those credits once the monthly contact cap on the current plan is reached.

Can candidate CVs and profiles be read?

Yes. GET /v1/seekers/me returns firstName, photoUrl, availability, cv and verificationStatus. GET /v1/documents/cv locates the PDF used on the CV import and employer candidate screens.

Topics

  • JOB TODAY API
  • same-day hiring endpoints
  • X-Session-Token
  • job search API
  • employer inbox
  • hiring credits
  • job application API
  • hospitality jobs API

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote