Sprout AI Job Search data API
Sprout - AI Job Search is Magnifex's candidate Android app for people who want an agent to hunt and apply on their behalf rather than browse a board all day. Version 2.0.14 signs in with Apple, Google, or email/password so the same account works on the phone and the matching web client. After sign-in, a wizard captures job-search status, target titles and types, minimum salary, locations (city for on-site roles, country for country-wide search), experience level, and EEO fields such as citizenship, veteran and disability status; onboarding then asks for a resume upload plus toggles for AI resume, AI cover letter and AI outreach. The home tab is a swipe deck of personalized matches with new roles added daily; swipe-right cards land on the Applications tab, where the user reviews AI-written resumes and cover letters, answers resume-gap questions, and only then lets Sprout submit. Profile holds a professional blueprint (overview, skills, work experience, education, certifications, languages), saved searches, documents, workspace, Gmail connect so recruiter replies land in a tagged inbox (or a proxy email if Gmail is disconnected), and LinkedIn-outreach eligibility. Credits meter applications — one extra credit per application that needed a successful search — with in-app alerts and support. English copy and US-style EEO onboarding point at a white-collar US job-search niche rather than a high-volume public board.
Nested job_applications records carry the posting's jobTitle and companySize, a tailored resume keyed by source_resume_id, cover letters, job_fit_factors and resume-gap qa_items whose change_proposals write back onto workExperience. Eligibility patches supply citizenshipStatus and disabilityStatus before the row can leave review; a successful outbound apply stamps submittedAt and decrements remainingCredits, while an expired posting refunds the extra search credit. Saved searches hold a query string or up to five queries together with workLocations and jobTypes, scoped to the blueprint at active_professional_profile_id.
Coach dashboards, resume-gap inboxes and recruiter-reply CRMs read that pipeline — review through submitted, Gmail unread employer tags, LinkedIn-outreach eligible — and openData Studio turns it 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.
Sign in and session
POST
/v1/candidate/sessionosintIssues the session JWT used by later Sprout calls after email/password, Google, or Apple sign-in.
Auth: Email/password, Google or Apple identity token, or a refresh token. Later calls send Authorization: Bearer <access_token> plus an API-key header.
- access_token
- refresh_token
- token_type
- expires_in
- user
- id
- app_metadata
- provider
POST /v1/candidate/session HTTP/1.1 X-Api-Key: <api-key> Content-Type: application/json { "email": "[email protected]", "password": "<redacted>" }{ "access_token": "<jwt>", "refresh_token": "<refresh>", "token_type": "bearer", "expires_in": 3600, "user": { "id": "usr_8c21", "email": "[email protected]", "app_metadata": {"provider": "google"} } }Swipe job matches
GET
/v1/matches/deckopendataFeeds the home swipe deck of personalized job matches (title, company-size band, saved-search id, location).
Auth: Authorization: Bearer <access_token> plus an API-key header.
- items
- id
- jobTitle
- companySize
- search_id
- locations
- city
- countryCode
GET /v1/matches/deck HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Accept: application/json{ "items": [{ "id": "job_4412", "jobTitle": "Staff Backend Engineer", "companySize": "11-50 employees", "search_id": "ss_18", "locations": [{"city": "Austin", "countryCode": "US"}] }] }Record a swipe decision
POST
/v1/matches/decisionsopendataRecords a left skip or right-apply on a match card; a right swipe creates a job_applications row that then appears on the Applications tab.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- id
- job_id
- direction
- search_id
- job_application_id
POST /v1/matches/decisions HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_id": "job_4412", "direction": "right", "search_id": "ss_18" }{ "id": "swipe_9021", "job_id": "job_4412", "direction": "right", "search_id": "ss_18", "job_application_id": "app_7731" }List job applications
GET
/v1/agent/apply-pipelineopendataLoads the Applications tab: each swipe-right row nested with the job, tailored resume, cover letter, timeline events, fit-factor analysis and resume-gap Q&A.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- id
- status
- job
- jobTitle
- locations
- countryCode
- resumes
- source_resume_id
- cover_letters
- events
- analyses
- job_fit_factors
- qa_items
- change_proposals
- workExperience
GET /v1/agent/apply-pipeline?include=job,resumes,coverLetters,events,analyses HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Accept: application/json{ "id": "app_7731", "status": "review", "job": { "id": "job_4412", "jobTitle": "Staff Backend Engineer", "locations": [{"city": "Austin", "countryCode": "US"}] }, "resumes": [{"id": "res_19", "source_resume_id": "res_base_3"}], "cover_letters": [{"id": "cl_44"}], "events": [], "analyses": [{ "id": "an_9", "job_fit_factors": [{"factor": "stack", "score": 0.86}], "qa_items": [{ "question": "Gap in 2023?", "change_proposals": [{"field": "workExperience", "proposed": "Contract work at Northwind"}] }] }] }Submit application review
POST
/v1/applications/approveopendataApproves the AI-generated resume and cover letter on the review screen so Sprout can submit the application.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- job_application_id
- source_resume_id
- selected_cover_letter_id
- id
- status
- remainingCredits
POST /v1/applications/approve HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_application_id": "app_7731", "source_resume_id": "res_base_3", "selected_cover_letter_id": "cl_44" }{ "id": "app_7731", "status": "submitted", "remainingCredits": 41 }Submit resume-gap answer
POST
/v1/applications/gap-answersopendataPosts the candidate's answer to a resume-gap question raised by job_application_analysis_qa before the application can leave review.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- job_application_id
- qa_item_id
- answer
- status
- change_proposals
- field
- proposed
- workExperience
POST /v1/applications/gap-answers HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_application_id": "app_7731", "qa_item_id": "qa_12", "answer": "Contract frontend work at Northwind, Mar–Nov 2023" }{ "qa_item_id": "qa_12", "status": "answered", "change_proposals": [{"field": "workExperience", "proposed": "Contract frontend, Northwind, 2023"}] }Provide missing application info
POST
/v1/applications/eligibilityopendataSupplies missing eligibility fields the posting still needs — citizenship, veteran and disability answers collected on onboarding — so the application can leave review.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- job_application_id
- id
- status
- citizenshipStatus
- disabilityStatus
POST /v1/applications/eligibility HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_application_id": "app_7731", "citizenshipStatus": "us_citizen", "disabilityStatus": "prefer_not_to_say" }{ "id": "app_7731", "status": "review", "citizenshipStatus": "us_citizen", "disabilityStatus": "prefer_not_to_say" }Mark application submitted
POST
/v1/applications/completeopendataFlips an approved application to submitted and appends a job_application_events row once the outbound apply succeeds; remainingCredits reflects the extra credit spent on a successful search.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- job_application_id
- id
- status
- submittedAt
- remainingCredits
- events
- type
- at
POST /v1/applications/complete HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_application_id": "app_7731", "submittedAt": "2026-10-11T15:04:00Z" }{ "id": "app_7731", "status": "submitted", "submittedAt": "2026-10-11T15:04:00Z", "remainingCredits": 41, "events": [{"type": "submitted", "at": "2026-10-11T15:04:00Z"}] }Release pending reviews
POST
/v1/applications/release-queueopendataClears applications that were held for document or resume-gap review so they can leave the review queue.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- job_application_ids
- released
- status
POST /v1/applications/release-queue HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_application_ids": ["app_7731", "app_7732"] }{ "released": ["app_7731", "app_7732"], "status": "released" }Transfer profile onto application
POST
/v1/applications/tailor-docsopendataRe-runs AI resume and cover-letter generation against the professional profile for one application.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- job_application_id
- source_resume_id
- resume_id
- cover_letter_id
- status
POST /v1/applications/tailor-docs HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_application_id": "app_7731", "source_resume_id": "res_base_3" }{ "resume_id": "res_20", "cover_letter_id": "cl_45", "source_resume_id": "res_base_3", "status": "ok" }Professional profile blueprint
GET
/v1/profiles/blueprintosintReturns the professional blueprint the agent tailors from: overview entries (work, education, skills) and profile URLs, scoped to the active profile.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- id
- active_professional_profile_id
- professionalTitle
- statusText
- entries
- kind
- details
- companySize
- title
- urls
- label
- url
- workExperience
GET /v1/profiles/blueprint?include=entries,urls HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Accept: application/json{ "id": "pp_4", "active_professional_profile_id": "pp_4", "professionalTitle": "Staff Engineer", "statusText": "open", "entries": [{ "id": "ent_88", "kind": "workExperience", "details": [{"companySize": "11-50 employees", "title": "Staff Engineer"}] }], "urls": [{"label": "LinkedIn", "url": "https://www.linkedin.com/in/example"}] }Activate professional profile
POST
/v1/profiles/activateosintSwitches the active professional blueprint so jobs, searches and resumes are scoped to the profile the candidate picks.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- professional_profile_id
- active_professional_profile_id
- professionalProfileId
- statusText
POST /v1/profiles/activate HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "professional_profile_id": "pp_4" }{ "active_professional_profile_id": "pp_4", "professionalProfileId": "pp_4", "statusText": "open" }Upload source resume
POST
/v1/documents/upload-urlopendataMints a signed upload URL for the candidate's source PDF; later tailored resumes point at this row via source_resume_id.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- filename
- contentType
- signedUrl
- resume_id
- source_resume_id
- status
POST /v1/documents/upload-url HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "filename": "alex-resume.pdf", "contentType": "application/pdf" }{ "signedUrl": "/v1/documents/put/res_base_3", "resume_id": "res_base_3", "source_resume_id": null, "status": "uploaded" }Saved searches
GET
/v1/searchesopendataLists the saved search filters (a query string or up to five query strings, locations, job types) that drive the swipe deck.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- id
- queries
- workLocations
- city
- countryCode
- jobTypes
GET /v1/searches HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Accept: application/json{ "id": "ss_18", "queries": ["staff backend", "platform engineer"], "workLocations": [{"city": "Austin", "countryCode": "US"}], "jobTypes": ["full_time"] }Suggested work locations
GET
/v1/geo/suggestionsopendataAutocomplete for the location wizard: city for on-site roles or country for country-wide search, written onto saved-search workLocations.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- suggestions
- city
- countryCode
- label
GET /v1/geo/suggestions?q=Aus HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Accept: application/json{ "suggestions": [{ "city": "Austin", "countryCode": "US", "label": "Austin, TX, United States" }] }Gmail accounts and inbox counts
GET
/v1/inbox/countsopendataPowers the Emails tab: Gmail connection state and unread counts for employer/recruiter threads tagged per application.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- connected
- accounts
- provider
- unread
GET /v1/inbox/counts HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Accept: application/json{ "connected": true, "accounts": [{"email": "[email protected]", "provider": "gmail"}], "unread": 3 }LinkedIn outreach eligibility
GET
/v1/outreach/eligibilityosintTells the AI-outreach toggle whether this profile may send LinkedIn messages as part of an application.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- eligible
- reason
GET /v1/outreach/eligibility HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Accept: application/json{ "eligible": true, "reason": null }Regenerate outreach message
POST
/v1/outreach/draftsosintRewrites the LinkedIn outreach note attached to one application after the eligibility check passes.
Auth: Authorization: Bearer <access_token> plus an API-key header.
- job_application_id
- message
- status
POST /v1/outreach/drafts HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_application_id": "app_7731" }{ "job_application_id": "app_7731", "message": "Hi — I applied for Staff Backend Engineer and would welcome a chat.", "status": "ok" }Report a job posting
POST
/v1/listings/flagsopendataSubmits a candidate report on a swipe-deck posting (closed, spam, or other).
Auth: Authorization: Bearer <access_token> plus an API-key header.
- id
- job_id
- reason
- details
- status
POST /v1/listings/flags HTTP/1.1 Authorization: Bearer <access_token> X-Api-Key: <api-key> Content-Type: application/json { "job_id": "job_4412", "reason": "closed", "details": "Posting already filled" }{ "id": "rpt_12", "job_id": "job_4412", "reason": "closed", "status": "submitted" }
Data categories
- job matches
- applications
- resumes and cover letters
- professional profiles
- saved searches
- application credits
- recruiter email
Where teams use this data
Agent apply-pipeline dashboard
A job-search ops tool pages job_applications with nested jobs, resumes, cover_letters, job_fit_factors and qa_items so a coach can see which swipe-right cards are still in review versus submitted.
Resume-gap coaching inbox
A career-coach product reads job_application_analysis_qa plus profile_change_proposals, posts answers, and writes the accepted workExperience back onto professional_profile_entries.
Credit and search telemetry
A billing bot watches remainingCredits against user_saved_searches runs, flagging when a multi-query search is about to spend the extra per-application credit and when an expired posting refunds it.
Recruiter-reply CRM
A lightweight CRM joins Emails-tab unread employer tags with mark-submitted events so follow-ups attach to the same job_application_id the swipe created.
Frequently asked questions
What does a Sprout job application record contain?
Each job_applications row nests the jobs posting and job_locations, tailored resumes (source_resume_id points at the uploaded PDF), cover_letters, job_application_events, and job_application_analyses with job_fit_factors plus qa_items and profile_change_proposals.
How does Sprout authenticate the candidate?
Sign-in accepts email/password, Google, or Apple. Later calls send Authorization: Bearer plus an API-key header; the same account also signs into the matching web client.
How are application credits charged?
remainingCredits meters swipe-right applies. Client copy states that a successful search uses one extra credit per application, and an expired posting issues the credit back.
Where do recruiter replies show up?
The Emails tab reads inbox counts after Connect Gmail. Replies are tagged per application in the candidate's Gmail; disconnecting Gmail switches new applies to a proxy (Sprout-given) email address.
Apps similar to Sprout - AI Job Search
- LazyApply — LazyApply is an AI job-search tool that autofills applications and submits them on boards such as LinkedIn, Indeed, Greenhouse, Dice and ZipRecruiter in the USA and Canada.
- Simplify — Simplify is an AI job-search platform that matches seekers to roles, tailors resumes, and can autofill and submit applications from a single profile.
- LoopCV — LoopCV lets a job seeker upload a CV once and then auto-apply to matching openings on LinkedIn, Indeed, Glassdoor and other boards.
- Huntr — Huntr is a job-search workspace that tracks applications, builds AI resumes and cover letters, and autofills application forms in one click.
- Indeed Job Search — Indeed is an American multinational employment website for job listings, launched in 2004 and available in over 60 countries and 28 languages.
- LinkedIn: Community & Network — LinkedIn is a business and employment-oriented social network where job seekers post CVs, employers post listings, and members manage a professional identity.
- Job Search by ZipRecruiter — ZipRecruiter is an American employment marketplace, headquartered in Santa Monica, that lets job seekers search US openings and apply from the site.
- Glassdoor | Jobs & Careers — Glassdoor is an American jobs and careers app, owned by Indeed, that publishes company ratings and reviews from current and former employees alongside listings.
Topics
- Sprout AI Job Search API
- Magnifex Sprout
- job_applications
- job_fit_factors
- AI cover letter
- saved searches
- application credits
- AI job agent
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