Job&Talent Data API: Instant Wage, Clocking & Jobs
Job&Talent: Get work today is the Android app of Job&Talent, the Madrid-founded staffing company that matches hourly and shift workers with warehouse, logistics, retail and hospitality clients. After email or social sign-in, workers browse vacancy cards, apply, and once placed they punch in with a QR code or a geofence, read the week's shifts, request leave, and open the Money home for Early Pay salary advances and Instant Wage withdrawals against hours already worked — plus a Job&Talent bank account when the wallet is opted in. The Play listing serves workers in Spain, Germany, France and Mexico, sitting alongside Randstad, Adecco, Indeed and local staffing apps rather than generalist job boards alone.
Instant Wage home pairs an earlyPay eligibility object — minAmount, maxAmount, buffer, feeMatrix, maskedAccount, isInstantPayment — with an instantWage wallet of accountId, currencyCode and withdrawable maxAmount. Salary-advance posts send amount plus the clockingId of hours already punched; the banking card returns bankAccountStatus, optInPreference and a balance of amount and currencyCode. Withdrawal rows carry status, type, failureReason and maskedBankAccount.
Geofenced punches carry placementId, inGeofence, shiftId and a location of lat/lng with accuracy. Clocking status answers with currentJob (companyId, companyName), currentShift (startsAt, endsAt, role) and latestClocking (clockingId, isLive, clockIn.time, atWorkplace). The shift window rolls totalPlannedMinutes against totalClockedMinutes and per-shift timeslot.startsAt.
Vacancy cards expose title, specs.salary, payRate, location.city and hasAlreadyApplied; applications keep recruitmentProcessId, interviewScheduled and offer. Leave rows hold ticket with period.localStartsOn / localEndsOn. Payroll, lending and staffing teams use those fields to reconcile earned-wage draws, prove attendance and fill shift gaps; openData Studio turns them into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Create email session
POST
/v1/staffing-worker/sessionopendataRegisters or signs in a worker with email, password, termsAccepted and marketingConsentAccepted, returning idToken, refreshToken, emailVerificationToken and optional stepUpToken.
Auth: Unauthenticated email/password or social login. Response idToken is the Bearer credential on later calls; refreshToken rotates the session.
- password
- termsAccepted
- marketingConsentAccepted
- idToken
- refreshToken
- emailVerificationToken
- stepUpToken
POST /v1/staffing-worker/session HTTP/1.1 Content-Type: application/json { "email": "[email protected]", "password": "******", "termsAccepted": true, "marketingConsentAccepted": false }{ "idToken": "<id-token>", "refreshToken": "<refresh-token>", "emailVerificationToken": "<email-verification-token>", "stepUpToken": null }Instant Wage and Early Pay home
GET
/v1/staffing-worker/money/homeopenfinanceLoads the Money home: earlyPay eligibility (minAmount, maxAmount, buffer, feeMatrix, maskedAccount, isInstantPayment) plus instantWage wallet limits (accountId, currencyCode, maxAmount, minAmount).
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- earlyPay
- instantWage
- currencyCode
- minAmount
- maxAmount
- buffer
- maskedAccount
- feeMatrix
- userAgreementUrl
- userAgreementAcceptanceRequired
- learnMoreUrl
- isInstantPayment
- accountId
- lowestCurrencyDenomination
GET /v1/staffing-worker/money/home HTTP/1.1 Authorization: Bearer <idToken>{ "earlyPay": { "currencyCode": "EUR", "minAmount": 20, "maxAmount": 180, "buffer": 10.0, "maskedAccount": "****4321", "feeMatrix": [{"bucket": 50, "fee": 2.5}], "userAgreementUrl": "https://example.com/early-pay-terms", "userAgreementAcceptanceRequired": true, "learnMoreUrl": "https://example.com/early-pay", "requirements": [], "freeLegalAdvances": "1", "lowestCurrencyDenomination": 1, "limitByZeroBucket": false, "isInstantPayment": true }, "instantWage": { "accountId": "acc-88a1", "currencyCode": "EUR", "maxAmount": 95.5, "minAmount": 5.0, "lowestCurrencyDenomination": 0.01, "maskedAccount": "****4321" } }Early Pay eligibility
GET
/v1/staffing-worker/money/eligibilityopenfinanceReturns Early Pay Eligible (or NotEligible): currencyCode, minAmount, maxAmount, buffer, maskedAccount, feeMatrix and isInstantPayment for a salary advance against punched hours.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- currencyCode
- minAmount
- maxAmount
- buffer
- maskedAccount
- feeMatrix
- userAgreementUrl
- userAgreementAcceptanceRequired
- learnMoreUrl
- requirements
- freeLegalAdvances
- lowestCurrencyDenomination
- limitByZeroBucket
- isInstantPayment
GET /v1/staffing-worker/money/eligibility HTTP/1.1 Authorization: Bearer <idToken>{ "currencyCode": "EUR", "minAmount": 20, "maxAmount": 180, "buffer": 10.0, "maskedAccount": "****4321", "feeMatrix": [{"bucket": 50, "fee": 2.5}], "userAgreementUrl": "https://example.com/early-pay-terms", "userAgreementAcceptanceRequired": true, "learnMoreUrl": "https://example.com/early-pay", "requirements": [], "freeLegalAdvances": "1", "lowestCurrencyDenomination": 1, "limitByZeroBucket": false, "isInstantPayment": true }Request salary advance
POST
/v1/staffing-worker/money/advancesopenfinanceRequests an Early Pay draw of amount tied to the clockingId of hours already punched.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- amount
- clockingId
POST /v1/staffing-worker/money/advances HTTP/1.1 Authorization: Bearer <idToken> Content-Type: application/json { "amount": 80, "clockingId": "clk-9f2a" }{ "ok": true }Wallet and banking status
GET
/v1/staffing-worker/money/bankingopenfinanceReads the Job&Talent wallet: bankingUrl, bankAccountStatus, optInPreference and balance.amount / balance.currencyCode.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- bankingUrl
- bankAccountStatus
- optInPreference
- balance
- amount
- currencyCode
GET /v1/staffing-worker/money/banking HTTP/1.1 Authorization: Bearer <idToken>{ "bankingUrl": "https://example.com/open-banking", "bankAccountStatus": "ACTIVE", "optInPreference": "OPTED_IN", "balance": { "amount": 126.4, "currencyCode": "EUR" } }Instant Wage transaction history
GET
/v1/staffing-worker/money/withdrawalsopenfinancePages Instant Wage withdrawals: date, dateLabel, status, type, amount, currencyId, maskedBankAccount and failureReason.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- date
- dateLabel
- status
- type
- failureReason
- amount
- currencyId
- maskedBankAccount
GET /v1/staffing-worker/money/withdrawals?page=1&per_page=20 HTTP/1.1 Authorization: Bearer <idToken>{ "data": [{ "date": "2026-09-28T18:12:00Z", "dateLabel": "28 Sep", "status": "COMPLETED", "type": "WITHDRAWAL", "failureReason": null, "amount": 40.0, "currencyId": "EUR", "maskedBankAccount": "****4321" }] }Withdraw Instant Wage
POST
/v1/staffing-worker/money/cashoutopenfinanceWithdraws amount from the Instant Wage wallet to the opted-in bank account.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- amount
POST /v1/staffing-worker/money/cashout HTTP/1.1 Authorization: Bearer <idToken> Content-Type: application/json { "amount": 40.0 }{ "ok": true }Early Pay advance history
GET
/v1/staffing-worker/money/advance-ledgeropenfinancePages Early Pay salary advances: date, title, type, status, amount, feeAmount, currencyId and failureReason.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- date
- title
- type
- status
- failureReason
- amount
- feeAmount
- currencyId
GET /v1/staffing-worker/money/advance-ledger?page=1&per_page=20 HTTP/1.1 Authorization: Bearer <idToken>{ "data": [{ "date": "2026-09-27T09:00:00Z", "title": "Early Pay", "type": "ADVANCE", "status": "COMPLETED", "failureReason": null, "amount": 80, "feeAmount": 2.5, "currencyId": "EUR" }] }Clocking status
GET
/v1/staffing-worker/attendance/liveopendataReturns live attendance: currentJob (companyId, companyName), currentShift (startsAt, endsAt, role), latestClocking (clockingId, isLive, clockIn.time, atWorkplace) and workplaces.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- currentJob
- companyId
- companyName
- placementInactive
- currentShift
- id
- name
- role
- department
- startsAt
- endsAt
- workplaceId
- latestClocking
- clockingId
- placementId
- shiftId
- isLive
- clockIn
- time
- atWorkplace
- timeRounded
- updatedByCompany
- workplaces
GET /v1/staffing-worker/attendance/live HTTP/1.1 Authorization: Bearer <idToken>{ "currentJob": { "companyId": "co-441", "companyName": "LogiPark Madrid" }, "placementInactive": false, "currentShift": { "id": "sh-12", "name": "Morning inbound", "role": "Picker", "department": "Inbound", "startsAt": "2026-10-02T06:00:00+02:00", "endsAt": "2026-10-02T14:00:00+02:00", "workplaceId": "wp-7", "legacyPlacementId": "pl-legacy-9" }, "latestClocking": { "clockingId": "clk-9f2a", "placementId": "pl-77", "shiftId": "sh-12", "isLive": true, "companyId": "co-441", "workplaceId": "wp-7", "clockIn": { "time": "2026-10-02T06:02:11Z", "updatedByCompany": false, "atWorkplace": true, "timeRounded": "2026-10-02T06:00:00Z", "timeEarly": null } }, "workplaces": [] }Clock in
POST
/v1/staffing-worker/attendance/punchesopendataPunches a worker in with placementId, inGeofence, shiftId and a location of lat/lng, isPrecise and accuracy.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- placementId
- inGeofence
- shiftId
- clockingLogTypeId
- location
- coordinates
- lat
- lng
- isPrecise
- accuracy
- clockingId
- isLive
- clockIn
- time
- atWorkplace
- timeRounded
POST /v1/staffing-worker/attendance/punches HTTP/1.1 Authorization: Bearer <idToken> Content-Type: application/json { "placementId": "pl-77", "inGeofence": true, "shiftId": "sh-12", "clockingLogTypeId": "punch-in", "location": { "coordinates": {"lat": 40.4168, "lng": -3.7038}, "isPrecise": true, "accuracy": 12.4 } }{ "clockingId": "clk-9f2a", "placementId": "pl-77", "shiftId": "sh-12", "isLive": true, "clockIn": { "time": "2026-10-02T06:02:11Z", "updatedByCompany": false, "atWorkplace": true, "timeRounded": "2026-10-02T06:00:00Z" } }Shift list
POST
/v1/staffing-worker/roster/windowopendataLists shifts between from and to with timeslot.startsAt/endsAt, plus shiftsStats.totalPlannedMinutes, totalClockedMinutes and absencePeriods.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- from
- to
- shifts
- id
- placementId
- name
- type
- status
- timeslot
- startsAt
- endsAt
- client
- shiftsStats
- totalPlannedMinutes
- totalClockedMinutes
- earnings
- absencePeriods
POST /v1/staffing-worker/roster/window HTTP/1.1 Authorization: Bearer <idToken> Content-Type: application/json { "from": "2026-10-01T00:00:00+02:00", "to": "2026-10-07T23:59:59+02:00" }{ "shifts": [{ "id": "sh-12", "placementId": "pl-77", "name": "Morning inbound", "type": "REGULAR", "status": "CONFIRMED", "timeslot": { "startsAt": "2026-10-02T06:00:00Z", "endsAt": "2026-10-02T14:00:00Z" }, "client": {"name": "LogiPark Madrid"} }], "shiftsStats": { "totalPlannedMinutes": 2400, "totalClockedMinutes": 2280, "earnings": null }, "absencePeriods": [] }Worker account overview
GET
/v1/staffing-worker/account/homeopendataLoads the worker home: stats.rating, shiftResponseRate, shiftAttendanceRate and jobInfo.clientName / clientLogoUrl plus dashboard shortcuts and tenantInfo.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- stats
- title
- rating
- shiftResponseRate
- shiftAttendanceRate
- jobInfo
- clientName
- clientLogoUrl
- dashboard
- tenantInfo
GET /v1/staffing-worker/account/home HTTP/1.1 Authorization: Bearer <idToken>{ "stats": { "title": "Your stats", "rating": {"value": 4.8}, "shiftResponseRate": {"value": 0.96}, "shiftAttendanceRate": {"value": 0.99} }, "jobInfo": { "clientName": "LogiPark Madrid", "clientLogoUrl": "https://example.com/logo.png" }, "dashboard": { "shortcuts": [] }, "tenantInfo": null }Job vacancy detail
GET
/v1/staffing-worker/openings/{openingId}opendataLoads a vacancy: title, specs.salary / payRate, location.city with latitude/longitude, responsibilities, hasAlreadyApplied and applicationEndpoint.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- id
- title
- description
- specs
- companyName
- hideCompanyInfo
- salary
- startDate
- companyLogoUrl
- payRate
- name
- subtitle
- location
- rawLocation
- city
- latitude
- longitude
- responsibilities
- hasAlreadyApplied
- expired
- applicationEndpoint
GET /v1/staffing-worker/openings/vr-88021 HTTP/1.1 Authorization: Bearer <idToken>{ "id": "jo-88021", "title": "Warehouse picker", "description": "Inbound picking on morning shifts.", "specs": { "companyName": "LogiPark Madrid", "hideCompanyInfo": false, "salary": "€11.20 / hour", "startDate": "2026-10-06", "companyLogoUrl": "https://example.com/logo.png", "payRate": { "name": "Hourly", "subtitle": "€11.20", "payRateContent": [] } }, "location": { "rawLocation": "Av. de Andalucía, Madrid", "city": "Madrid", "latitude": 40.4168, "longitude": -3.7038 }, "responsibilities": ["Pick inbound cartons"], "hasAlreadyApplied": false, "expired": false, "applicationEndpoint": "/v1/staffing-worker/openings/jo-88021/apply" }Job applications
GET
/v1/staffing-worker/pipeline/applicationsopendataLists candidate processes: id, title, recruitmentProcessId, interviewScheduled, status, employer, offer and nextSteps.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- id
- title
- description
- createdAt
- leadId
- recruitmentProcessId
- interviewScheduled
- status
- employer
- offer
- application
- checkout
- jobOpening
- nextSteps
- action
GET /v1/staffing-worker/pipeline/applications HTTP/1.1 Authorization: Bearer <idToken>{ "data": [{ "id": "cp-331", "title": "Warehouse picker", "description": "Inbound picking", "createdAt": "2026-09-20T10:00:00Z", "leadId": "lead-12", "recruitmentProcessId": "rp-9", "interviewScheduled": false, "status": [{"label": "In review"}], "employer": {"name": "LogiPark Madrid"}, "offer": null }] }Leave overview
GET
/v1/staffing-worker/time-off/overviewopendataLists leave tickets: id, name, ticket and period.localStartsOn / localEndsOn with duration and labels.
Auth: Bearer idToken from the email-session exchange; refreshToken rotates the session.
- leaves
- id
- iconUrl
- name
- ticket
- period
- localStartsOn
- localEndsOn
- duration
- labels
GET /v1/staffing-worker/time-off/overview HTTP/1.1 Authorization: Bearer <idToken>{ "leaves": [{ "id": "lv-14", "iconUrl": "https://example.com/leave.png", "name": "Annual leave", "ticket": "T-1042", "period": { "localStartsOn": "2026-10-12", "localEndsOn": "2026-10-14", "duration": {"days": 3} }, "labels": [{"text": "Approved"}] }] }
Data categories
- earned-wage
- balances
- transactions
- clocking
- shifts
- jobs
- applications
- leaves
- auth-sessions
Where teams use this data
Earned-wage reconciliation
A lending or payroll stack reads Instant Wage maxAmount and Early Pay feeMatrix, then matches each advance amount to the clockingId of punched hours so draws cannot exceed live attendance.
Geofenced attendance proof
A workforce platform stores inGeofence, lat/lng accuracy and atWorkplace on each clock-in, then compares latestClocking.isLive against currentShift.startsAt to flag no-shows.
Planned vs clocked hours
A timesheet bot pulls shift_list shiftsStats.totalPlannedMinutes against totalClockedMinutes and absencePeriods to pre-fill weekly hours before payroll close.
Staffing pipeline sync
An ATS copies vacancy title, specs.salary and location.city, then follows applications by recruitmentProcessId, interviewScheduled and offer status.
Frequently asked questions
What wage fields does Instant Wage return?
The Money home returns earlyPay eligibility (minAmount, maxAmount, buffer, feeMatrix, maskedAccount, isInstantPayment) and an instantWage wallet (accountId, currencyCode, maxAmount, minAmount). Withdrawals post amount; history rows add status, type, failureReason and maskedBankAccount.
How is a clock-in proven?
A punch sends placementId, inGeofence, shiftId and location coordinates (lat, lng, isPrecise, accuracy). Status then exposes latestClocking.clockingId, isLive, clockIn.time and atWorkplace against the currentShift window.
How does the worker session authenticate?
Email/password or social login issues idToken, refreshToken, emailVerificationToken and optional stepUpToken. Later calls send Authorization: Bearer <idToken>; refreshToken rotates the session.
Which vacancy fields can an ATS copy?
A vacancy includes title, specs.salary, payRate, location.city with latitude/longitude, responsibilities, hasAlreadyApplied and applicationEndpoint. Applications list recruitmentProcessId, interviewScheduled, status and offer.
Apps similar to Job&Talent: Get work today
- Randstad — Randstad is a Dutch human-resource consulting firm, headquartered in Diemen, that staffs temporary and flexible roles across 39 markets and lists openings on its Spain site.
- Adecco — Adecco Group is a Zürich-based temporary staffing firm that recruits and contracts temporary workers in Spain, covering industrial, office and other placements.
- Indeed Job Search — Indeed is an employment website available in over 60 countries and 28 languages that aggregates job listings from job boards, staffing firms and company career pages.
- InfoJobs - Job Search — InfoJobs is a Barcelona-based private job board, owned by Adevinta, that job seekers in Spain use to search offers and apply.
- JOB TODAY: Hire & Find Jobs — JOB TODAY is a mobile hiring app for hospitality, retail, warehouse and other nearby hourly jobs in Spain, the UK and the US, with direct in-app chat between candidates and employers.
- Manpower — Manpower is ManpowerGroup's contingent-staffing brand, and its Spain site helps candidates find jobs across logistics, manufacturing, retail, hospitality and other sectors.
- OCC: Job Search — OCC is OCCMundial's job-search app for Mexico, where candidates search vacancies by keyword and location, build a CV and track applications.
- LinkedIn: Community & Network — LinkedIn is a professional network, available in over 200 countries, where job seekers post CVs and employers list openings.
Topics
- jobandtalent api
- instant wage
- early pay
- earned wage access
- clocking geofence
- shift list
- vacancy application
- staffing worker 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