Resume Builder - CV Engineer icon

CV Engineer data API: resume import, jobs and hosted CVs

Matt Callery · Jobs & Careers

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

  • Resume Builder - CV Engineer screenshot 1
  • Resume Builder - CV Engineer screenshot 2
  • Resume Builder - CV Engineer screenshot 3
  • Resume Builder - CV Engineer screenshot 4
  • Resume Builder - CV Engineer screenshot 5
  • Resume Builder - CV Engineer screenshot 6
  • Resume Builder - CV Engineer screenshot 7
  • Resume Builder - CV Engineer screenshot 8

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

    Parses 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
    • email
    • 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-cards opendata

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

    Sends 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/examples opendata

    Asks 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-components osint

    Normalises 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} osint

    Looks 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-ip osint

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

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

    • email
    • 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/leads opendata

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

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

    Opens 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/papers opendata

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

    Quotes 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
    • email
    • street
    • city
    • zip
    • products
    • product_type_id
    • pdf
    • 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} opendata

    Reads 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

Get a quote