Job&Talent: Get work today icon

Job&Talent Data API: Instant Wage, Clocking & Jobs

Job&Talent · Jobs & Careers

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

  • Job&Talent: Get work today screenshot 1
  • Job&Talent: Get work today screenshot 2
  • Job&Talent: Get work today screenshot 3
  • Job&Talent: Get work today screenshot 4
  • Job&Talent: Get work today screenshot 5
  • Job&Talent: Get work today screenshot 6

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/session opendata

    Registers 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.

    • email
    • 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/home openfinance

    Loads 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/eligibility openfinance

    Returns 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/advances openfinance

    Requests 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/banking openfinance

    Reads 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/withdrawals openfinance

    Pages 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/cashout openfinance

    Withdraws 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-ledger openfinance

    Pages 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/live opendata

    Returns 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/punches opendata

    Punches 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/window opendata

    Lists 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/home opendata

    Loads 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} opendata

    Loads 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/applications opendata

    Lists 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/overview opendata

    Lists 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

Get a quote