JOB TODAY data API: jobs, chat and hiring credits
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
API surface
Phone-number login session
POST
/v1/auth/phone/sessionopendataMints 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
- 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 screenSession payload carries sessionToken, userExperience, firstName and email
Email password login
POST
/v1/auth/email/sessionopendataEmail/password sign-in used alongside SSO and phone flows on the authorization screen.
Auth: None. Returns sessionToken used as X-Session-Token.
- 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 screenSame sessionToken shape as the phone-number login response
Universal mobile search
GET
/v1/jobs/nearby-feedopendataPowers 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 tabFeed cards expose salary, shift, immediateStart and isUrgent
Map jobs
GET
/v1/geo/vacanciesopendataFeeds 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 screenPin payload carries geoPoint, salary and distance
Submit job application
POST
/v1/applications/createopendataOne-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 actionResponse carries applicationStatus and createdAt
Application status
GET
/v1/applications/status/{id}opendataReads 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 listPayload includes hasInterview and interviewId when a slot is booked
Jobseeker profile
GET
/v1/seekers/meosintLoads jobseeker profile fields: name, photo, availability, CV pointer and verificationStatus.
Auth: X-Session-Token from phone or email login (sessionToken).
- id
- firstName
- lastName
- fullName
- 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 screensProfile payload includes availability, cv and verificationStatus
Profile CV PDF
GET
/v1/documents/cvosintDownloads 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
- 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 screenResponse locates the PDF plus fullName and contact fields
Chat inbox
GET
/v1/messages/threadsopendataPages 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 screensThread cards carry unreadCount, lastMessage and jobTitle
Employer inbox
GET
/v1/hiring/threadsopendataLoads 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 screensThread items include applicationStatus, unreadCount and hasInterview
Recommended candidates
GET
/v1/candidates/suggestedopendataEmployer 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 screenCards expose availability, immediateStart and verificationStatus
Hiring-credit bank status
GET
/v1/wallet/creditsopenfinanceReads 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 screenWallet payload nests bank.balance.subscription and packages.subscriptions
Interviews list
GET
/v1/schedule/slotsopendataLists 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 screensEach slot carries interviewDate and interviewStatus
Register device
POST
/v1/devices/registeropendataRegisters 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 registrationBody 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