get_resume_format once before your first create_resume or update_resume. It
returns the exact document shape plus the available templates, fonts and writing guidance,
so what you build validates the first time.
Two dry runs are worth knowing about: preview_resume_text renders and estimates length
without saving anything, and export_resume_pdf reports the page count measured from the
rendered document rather than estimated.
Tailoring keeps a trail. duplicate_resume records which resume the copy came from, so
compare_resumes can say exactly what a variant changed — bullets added, dropped and
reworded, sections hidden — and list_resumes carries each resume’s track record: how many
applications went out with it, how many reached an interview, how many reached an offer.
The document contract → · Publishing and exporting →
The descriptions below are quoted verbatim from what the server sends a connected
assistant, which is why they address it rather than you. They are reproduced rather than
rewritten so this page cannot drift from what your assistant actually receives.
get_resume_format
Get the resume document format
Returns the exact JSON shape of a resume document plus the available templates, fonts and writing guidance. Call this once before your first create_resume or update_resume so the document you build validates.
No arguments.
list_resumes
List resumes
All saved resumes with their target role/company, how many applications each is attached to, and publicUrl — the shareable link, or null if that resume isn’t published. Each row carries outcomes: how many applications sent with it actually went out, how many reached at least a screen, and how many reached an offer — so this is the tool that answers ‘which resume is working?’. Interview and offer counts include applications that got there and later closed, not just where things stand today. Favourites come first, then most recently updated. Pass search to narrow by name, target role or target company when the user names a specific one — ‘my Stripe resume’ is a search, not a reason to fetch everything.
get_resume
Get a resume
Fetch one resume: its settings, its full document JSON, publicUrl — the shareable link, or null if it isn’t published — what it was tailored from, the variants tailored off it, and every application it was sent to with the stage each reached. Read this before update_resume, which replaces the whole document. The applications are what makes ‘is this resume working’ answerable from one call.
create_resume
Create a resume
Create a resume. Either pass a complete data document you have written (call get_resume_format first), or pass seedFromMe: true to auto-populate a first draft from Me and then refine it with update_resume.
update_resume
Update a resume
Update a resume’s settings and/or replace its document. Passing data replaces the ENTIRE document, so call get_resume first, modify the JSON you get back, and send the whole thing.
Overwrites or deletes.
export_resume_pdf
Export a resume as a PDF
Render a resume to a real PDF on the server and return a download url, plus how many pages it actually came out to. Reach for this when the user wants a FILE to attach to an email or upload to a form — use publish_resume instead when they want a link. The page count is measured from the rendered document rather than estimated, so it is the reliable way to answer ‘does this fit on one page?’ before they send it. The url opens in their browser, where they are already signed in; it is not a public link and nobody else can fetch it. If this instance has no headless browser the tool says so and points at the print page, which produces the same document through the browser’s own print dialog.
publish_resume
Publish a resume to a public link
Give a resume a shareable web address. Reach for this whenever the user needs a LINK rather than a file — an application form with a ‘portfolio or resume URL’ field, a recruiter asking them to send something over, a message where attaching a PDF would be awkward. Returns publicUrl, which is the whole point: hand it straight to the user. Anyone with the link can read the resume without signing in, and the link is the only protection, so it is long and random — it cannot be guessed or found by searching, and the page tells search engines not to index it. The user’s private notes on the resume are never shown — but if this resume has showPhoto on, their face is on that page, visible to anyone holding the link. Say so before publishing one, or offer to turn the photo off first. Calling this again while the resume is already published returns the SAME url, so it is safe to repeat. If the resume was previously unpublished, publishing mints a brand new url and the old one stays dead.
unpublish_resume
Withdraw a resume’s public link
Turn off a resume’s public link. Reach for this when the user is done with a link, or has sent one somewhere they regret. The page starts returning ‘not found’ immediately for everyone who has the url. This is PERMANENT for that address: the link is not parked or paused, it is destroyed, and publishing the same resume later produces a different url. Say so before doing it if the user might still need the old link working. Does not touch the resume itself — nothing is deleted.
Overwrites or deletes.
duplicate_resume
Duplicate a resume
Copy an existing resume so you can tailor a variant without losing the original. The usual flow for a new application. The copy records which resume it came from (baseResumeId), so after tailoring, compare_resumes can show exactly what changed — prefer this over building a tailored document with create_resume from scratch, which loses that trail unless you pass baseResumeId yourself.
tailor_resume_for_application
Start a tailored resume for one job
Copy the base resume, name it for the job, point it at that company and role, and attach it to the application — the four steps this otherwise takes, in one call. Returns the new resume (with its full document, ready to rewrite with update_resume) and what it was based on. The base is worked out for you: the original document, favourite first, the one that has variants rather than one of the variants. Pass baseId to override that. With nothing on file yet it builds the first draft from what is on file instead of refusing, so a new person asking for a tailored resume gets one. Anything already attached to that application is replaced — the old document is not deleted, it just stops being the one on this job.
compare_resumes
Compare two resumes
What changed between two resumes — typically a tailored variant against the base it was duplicated from. Pass just id and it compares against the resume’s recorded base (duplicate_resume sets that automatically); pass base_id to compare against any other resume. Returns the changed header fields, each section’s added and removed bullets and entries, and a one-line summary like ‘+4 bullets · −2 bullets · summary edited’. A reworded bullet shows as one removed plus one added — old wording beside new, no similarity guessing. Read-only, nothing is written. Reach for this when the user asks what a tailored copy changed, or to review a variant with them before it goes out.
set_resume_base
Say what a resume was tailored from
Record that one resume is a tailored copy of another, so compare_resumes can compare them. duplicate_resume sets this for you; this is for documents that already existed, or to re-point one. Pass an empty baseId to unlink. Refuses a loop — two resumes cannot each be the other’s base — and refuses to make a resume its own base.
trace_resume_evidence
Which of your own material backs each bullet
For every experience bullet in a resume, the highlights from Me that stand behind it, best match first, plus a count of the bullets nothing backs. This is derived by comparing text, not recorded when the document was written — so treat a match as ‘this claim is in your notes’, not as proof of authorship. The unbacked list is the useful half: those are the lines the person cannot expand on from their own material, which is exactly what to walk through before an interview, and what to ask about before writing anything new. Never invent evidence for a bullet that has none.
delete_resume
Delete a resume
Permanently delete a resume.
Overwrites or deletes.
reorder_resume
Move a section, entry or bullet
Move one piece of a resume to a different position — a section, an entry inside it, or a bullet inside that. Use this instead of update_resume whenever only the ORDER changes: update_resume replaces the whole document, so reordering that way means reproducing every word of it and risks dropping content you did not mean to touch. This moves one thing and leaves the rest untouched. Name the thing that moves by giving section, plus entry if you are moving an entry, plus bullet if you are moving a bullet — the deepest one you name is what moves. Each of them takes an id, the name it goes by (a heading, a company or school, the bullet’s own words) or its number in the list, so you can pass what the user said. position is 1-based: 1 puts it first, and anything past the end puts it last. Returns what moved, from where to where, and the section order that resulted. If nothing matches, the error lists what is actually there — read it and try again rather than falling back to update_resume.