CV Engineer data API: resume import, jobs and hosted CVs
Resume Builder - CV Engineer is Matt Callery's Android CV maker, branded CV Engineer. Jobseekers pick a template, reorder sections, set CV language and page size, then fill contact, career, education, projects, skills, interests and references; an AI assistant rewrites bullets and supplies examples, and a scanner imports PDF, DOCX, DOC, RTF or TXT files. Signed-in users (Google, Facebook or email via FirebaseUI) can publish a hosted CV, search vacancies by title, city and radius, draft a resignation letter, and unlock Plus through RevenueCat while ads run for free users. It serves English-first jobseekers worldwide and sits alongside Resume.io, Kickresume, Rezi and the resume tools inside Indeed and LinkedIn rather than a single-country job board.
Imported resume text lands as structured resumeData: phone_number on the contact block, career_sections with employer and job_title, plus education_sections keyed by school.
Vacancy cards then attach applyUrl, postedDate and brandfetchUrl to each listing, while a hosted PDF keeps hosted_cv_file_name and print quotes return order_price, delivery_price and total_price.
Staffing CRMs, job-alert routers and CV-hosting widgets consume those records; 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.
Import resume into structured fields
POST
/v1/resumes/importopendataParses pasted or scanned resume text (PDF, DOCX, DOC, RTF, TXT) into resumeData: contact fields, career_sections, education_sections, projects, key_skills, interests and references.
Auth: Firebase Auth ID token as Authorization: Bearer after Google, Facebook or email sign-in (FirebaseUI).
- status
- resumeData
- name
- phone_number
- address
- personal_statement
- career_sections
- employer
- job_title
- details
- start_date
- end_date
- education_sections
- school
- qualification
- grade
- key_skills
- projects
- project_title
- project_details
- interests
- references
- full_name
- cvLanguage
- resumeText
POST /v1/resumes/import HTTP/1.1 Authorization: Bearer <firebase-id-token> Content-Type: application/json { "resumeText": "Jane Doe\nProduct Manager\nAcme Corp 2020-2024", "cvLanguage": "ENGLISH" }{ "status": "success", "resumeData": { "name": "Jane Doe", "email": "[email protected]", "phone_number": "+1 415 555 0100", "address": "San Francisco, CA", "personal_statement": "Product manager focused on marketplace growth.", "career_sections": [{ "employer": "Acme Corp", "job_title": "Product Manager", "details": "Shipped the applicant tracking workflow.", "start_date": "2020-01", "end_date": "2024-06" }], "education_sections": [{ "school": "Example University", "qualification": "BSc Computer Science", "grade": "2:1", "details": "HCI elective", "start_date": "2016", "end_date": "2019" }], "key_skills": "Roadmapping, SQL, stakeholder comms", "projects": [{ "project_title": "Internal jobs board", "project_details": "Matched roles to CVs by title and city." }], "interests": "Trail running", "references": [{ "full_name": "Alex Rivera", "email": "[email protected]", "phone_number": "+1 415 555 0199", "job_title": "Engineering Manager", "employer": "Acme Corp" }] } }Fetch job recommendations
POST
/v1/cv/job-cardsopendataReturns job cards for jobTitle + city + countryCode. status is success, empty, error, disabled or missing_criteria; each job needs id, title and applyUrl.
Auth: Firebase Auth ID token as Authorization: Bearer after Google, Facebook or email sign-in (FirebaseUI).
- status
- jobs
- id
- title
- applyUrl
- company
- source
- location
- description
- logoUrl
- salary
- postedDate
- cvEngLogoUrl
- brandfetchUrl
- jobTitle
- city
- countryCode
- language
- userAgent
- platform
- radius
POST /v1/cv/job-cards HTTP/1.1 Authorization: Bearer <firebase-id-token> Content-Type: application/json { "jobTitle": "Product Manager", "city": "San Francisco", "countryCode": "US", "language": "en", "userAgent": "CvEngineer/18.01.94 (Android)", "platform": "android", "radius": 25 }{ "status": "success", "jobs": [{ "id": "t-88421", "title": "Staff Product Manager", "applyUrl": "https://example.com/apply/t-88421", "company": "Example Labs", "source": "partner", "location": "San Francisco, CA", "description": "Own the candidate home feed.", "logoUrl": "https://example.com/logo.png", "salary": "$160k–$190k", "postedDate": "2026-09-18", "cvEngLogoUrl": "https://example.com/cveng-logo.png", "brandfetchUrl": "https://example.com/brand/example-labs" }] }Rewrite CV text with AI assistant
POST
/v1/assistant/rewriteopendataSends a prompt plus appLanguage to the rewrite assistant and returns status + text used to replace a CV bullet or personal_statement.
Auth: Firebase Auth ID token as Authorization: Bearer after Google, Facebook or email sign-in (FirebaseUI).
- prompt
- appLanguage
- status
- text
POST /v1/assistant/rewrite HTTP/1.1 Authorization: Bearer <firebase-id-token> Content-Type: application/json { "prompt": "Rewrite this bullet for a product manager CV.", "appLanguage": "en" }{ "status": "success", "text": "Led a cross-functional squad that cut time-to-offer by 18%." }Generate CV section examples
POST
/v1/assistant/examplesopendataAsks the examples assistant for sample CV copy from a prompt and returns status + text for empty career or education sections.
Auth: Firebase Auth ID token as Authorization: Bearer after Google, Facebook or email sign-in (FirebaseUI).
- prompt
- status
- text
POST /v1/assistant/examples HTTP/1.1 Authorization: Bearer <firebase-id-token> Content-Type: application/json { "prompt": "Example bullets for a product manager at a marketplace." }{ "status": "success", "text": "Owned discovery for the jobs feed; shipped ranking experiments." }Split address into city and country
POST
/v1/geo/address-componentsosintNormalises a free-text address into components.city, components.country and components.countryCode for job-search city/country pickers.
Auth: Firebase Auth ID token as Authorization: Bearer after Google, Facebook or email sign-in (FirebaseUI).
- address
- status
- components
- city
- country
- countryCode
POST /v1/geo/address-components HTTP/1.1 Authorization: Bearer <firebase-id-token> Content-Type: application/json { "address": "500 Market St, San Francisco, CA" }{ "status": "success", "components": { "city": "San Francisco", "country": "United States", "countryCode": "US" } }Resolve client IP to city
GET
/v1/geo/lookup/{ip}osintLooks up country_code and optional city for an IP so the job feed can default country and city.
Auth: None. Public geolocation lookup used to seed job-search city and country_code.
- country_code
- city
GET /v1/geo/lookup/8.8.8.8 HTTP/1.1 Accept: application/json{ "country_code": "US", "city": "Mountain View" }Read public client IP
GET
/v1/geo/client-iposintReturns the device's public ip used as the ip field on job-alert register and as input to geolocation.
Auth: None. Public IP lookup used as the ip field on job-alert register and as input to geolocation.
- ip
GET /v1/geo/client-ip HTTP/1.1 Accept: application/json{ "ip": "203.0.113.10" }Pre-ping job-alert lead
GET
/v1/alerts/leads/verifyopendataChecks whether an email is eligible for job alerts before register. Parses response, warning, email_valid/emailValid, reason and ip.
Auth: None. Query map with email and source.
- source
- response
- warning
- email_valid
- emailValid
- reason
- ip
GET /v1/alerts/leads/verify?email=jane%40example.com&source=cvengineer HTTP/1.1 Accept: application/json{ "response": "ok", "warning": null, "email": "[email protected]", "email_valid": "true", "reason": null, "ip": "203.0.113.10" }Register job-alert lead
POST
/v1/alerts/leadsopendataRegisters a job-alert lead after a successful pre-ping. response contains registered, duplicate or invalid; emailValid false is treated as invalid.
Auth: None. application/x-www-form-urlencoded field map.
- source
- ip
- country
- language
- search
- location
- subid
- firstname
- first_name
- response
- warning
- email_valid
- reason
POST /v1/alerts/leads HTTP/1.1 Content-Type: application/x-www-form-urlencoded email=jane%40example.com&source=cvengineer&ip=203.0.113.10&country=US&language=en&search=Product+Manager&location=San+Francisco&subid=android&firstname=Jane&first_name=Jane{ "response": "registered", "warning": null, "email": "[email protected]", "email_valid": "true", "reason": null, "ip": "203.0.113.10" }Authenticate print-order session
POST
/v1/print/sessionopendataOpens a print-partner session. Auth response wire fields are status and token.
Auth: Returns token used as Bearer on later print catalog and order calls. Request body is a JSON RequestBody; field names were not recovered.
- status
- token
POST /v1/print/session HTTP/1.1 Content-Type: application/json {}{ "status": "ok", "token": "<session-token>" }List print paper stocks
GET
/v1/print/papersopendataLists paper stocks the print partner can run: id, name, thickness and front/back treatment types used in runlists.paper_id.
Auth: Bearer token from the print-session login.
- id
- name
- description
- thickness
- predefined_front_treatment_type
- predefined_back_treatment_type
GET /v1/print/papers HTTP/1.1 Authorization: Bearer <session-token> Accept: application/json[{ "id": 12, "name": "Silk 170 gsm", "description": "Coated silk for CVs", "thickness": 0.17, "predefined_front_treatment_type": 1, "predefined_back_treatment_type": 0 }]Calculate printed-CV order price
POST
/v1/print/orders/quoteopendataQuotes a printed CV: delivery address plus products/runlists (size_id, paper_id, sides) and returns order_price, delivery_price and total_price.
Auth: Bearer token from the print-session login.
- payment_type_id
- delivery
- courier
- iso_code
- name
- phone
- street
- city
- zip
- products
- product_type_id
- amount
- production_speed
- runlists
- sides
- size_id
- paper_id
- order_price
- delivery_price
- total_price
POST /v1/print/orders/quote HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "payment_type_id": 1, "delivery": { "courier": "dhl", "iso_code": "US", "name": "Jane Doe", "phone": "+1 415 555 0100", "email": "[email protected]", "street": "500 Market St", "city": "San Francisco", "zip": "94105" }, "products": [{ "product_type_id": 4, "pdf": "<base64-cv>", "amount": 20, "production_speed": "standard", "runlists": [{ "sides": 2, "size_id": 3, "paper_id": 12 }] }] }{ "order_price": 24.5, "delivery_price": 6.0, "total_price": 30.5 }Download hosted CV PDF
GET
/v1/hosted-cvs/{slug}opendataReads the hosted CV object for a public slug. Storage keeps hosted_cv_file_name, hosted_cv_screen_type and per-field contact visibilities.
Auth: Firebase Auth required to upload. Public download of an already-hosted slug; contact fields honour hosted_cv_contact_visibilities.
- hosted_cv_file_name
- hosted_cv_screen_type
- hosted_cv_contact_visibilities
- hosted_cv_contact_visibilities_email
- hosted_cv_contact_visibilities_mobile
- hosted_cv_contact_visibilities_address
GET /v1/hosted-cvs/jane-doe HTTP/1.1 Accept: application/pdf{ "hosted_cv_file_name": "jane-doe", "contentType": "application/pdf", "hosted_cv_screen_type": "full", "hosted_cv_contact_visibilities": { "hosted_cv_contact_visibilities_email": true, "hosted_cv_contact_visibilities_mobile": false, "hosted_cv_contact_visibilities_address": false } }
Data categories
- resumes
- job-listings
- geolocation
- print-orders
Where teams use this data
ATS resume ingest
Staffing CRMs pull parsed career_sections and education_sections from an imported CV so recruiters skip retyping employer, job_title, school and dates.
Job-alert matching
Alert routers match jobTitle, city and countryCode against Talent cards and open applyUrl without scraping HTML vacancy pages.
Public CV hosting
Portfolio sites embed the hosted PDF slug and honour hosted_cv_contact_visibilities for email, mobile and address.
Print-run quoting
Print shops price paper_id and size_id runs from order_price and delivery_price before the seeker confirms a physical CV order.
Frequently asked questions
Which fields come back from resume import?
A successful call returns resumeData with name, email, phone_number, address, personal_statement, career_sections (employer, job_title, details, dates), education_sections (school, qualification, grade), key_skills, projects, interests and references.
How are recommended jobs keyed?
Each vacancy card needs id, title and applyUrl. Optional fields include company, source, location, description, salary, postedDate, logoUrl, cvEngLogoUrl and brandfetchUrl. status may be success, empty, error, disabled or missing_criteria.
What does a hosted CV store?
The hosted PDF is keyed by a public slug. Firestore keeps hosted_cv_file_name, hosted_cv_screen_type and hosted_cv_contact_visibilities for email, mobile and address.
How does sign-in work?
Google, Facebook or email via FirebaseUI issues an ID token used as Bearer on the resume, jobs, rewrite, examples and address calls. Print catalog calls use a separate token from the print-session login.
Apps similar to Resume Builder - CV Engineer
- Resume.io — Resume.io is an online resume builder with ATS-oriented templates, AI-assisted writing, PDF and DOCX export, and a cover-letter generator that can draft from a pasted job link.
- Kickresume — Kickresume is an online CV and cover-letter builder with AI writing, recruiter-oriented templates, LinkedIn import, and a website builder that turns a resume into a personal site.
- Rezi — Rezi is an AI resume builder that scores ATS fit section by section, targets keywords from a job description, and also generates cover letters and resignation letters.
- Novorésumé — Novorésumé is a browser resume builder with ATS-oriented templates, an AI assistant, a cover-letter generator and free PDF download.
- Enhancv — Enhancv is a drag-and-drop resume builder that imports LinkedIn or an existing file, rewrites bullets to match a pasted job ad, and exports PDF or TXT.
- Indeed Job Search — Indeed is a job-listing aggregator under Recruit Holdings that also lets candidates post and store a resume alongside keyword search.
- LinkedIn: Community & Network — LinkedIn is a professional network whose member profile (work, education and skills) is used as a digital CV and to apply to jobs posted on the platform.
Topics
- CV Engineer API
- resume import
- resumeData
- career_sections
- job listings
- applyUrl
- hosted CV
- order_price
- phone_number
- Matt Callery
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