PipedreamHQ / PipedreamHQ/pipedream
PatchWork
- Dominant language
- JavaScript
- Stars
- 11.7k
- Forks
- 5.8k
- Avg merge
- 3d 10h
- Merged PRs (30d)
- 102
Description
### App
PatchWork
https://plum-yak-main-cbd600a.zuplo.site/api
### Sources
Resume ready Poll GET /v1/resumes, emit when a resume's status changes from generating → ready
Resume failed Poll GET /v1/resumes, emit when status becomes error
Profile build complete Poll GET /v1/profile, emit when status changes from processing → ready or error
New resume created Poll GET /v1/resumes, emit on new id appearing in the list
### Actions
Documents
POST /v1/documents — Upload a document. Multipart form with file (PDF/DOCX/TXT, max 20MB) and type (one of: resume, linkedin, cover_letter). Returns document ID, status, char count.
GET /v1/documents — List all uploaded documents.
DELETE /v1/documents/:id — Delete a document.
Profile
POST /v1/profile/build — Start async AI profile pipeline from uploaded documents. Returns { jobId, status: "processing" }. Requires at least one document with status: ready. Returns 409 if a build is already in progress.
GET /v1/profile — Get current profile: status, contact fields (name, email, phone, location, LinkedIn, website, summary), and all sections (experience, skills, etc.).
Resumes
POST /v1/resumes/generate — Start async resume generation. Requires jobTitle, companyName, jobDescription, type: "targeted". Optional: personalNotes, seniorityOverride, analysisId (from analyze-jd), jobPostingUrl. Returns { resumeId, status: "generating" }. Requires profile to be ready.
GET /v1/resumes — List resumes. Query params: limit (1–200, default 50), offset. Returns id, jobTitle, companyName, status, atsScore, recruiterScore, unicornScore.
GET /v1/resumes/:id — Get a single resume. Returns full detail: status, htmlContent, structuredContent, jobProfile, resumeAnalysis, insights, atsScore, recruiterScore, unicornScore, revisionLog, uncertainKeywords, seniorityLevel, targetPages.
DELETE /v1/resumes/:id — Delete a resume.
GET /v1/resumes/:id/download?format=pdf|docx — Download the resume file. format defaults to pdf.
JD Analysis
POST /v1/resumes/analyze-jd — Pre-analyze a job description. Body: jobTitle, jobDescription, optional companyName and candidateCareerSummary. Returns { analysisId } — pass this to resumes/generate as analysisId to skip the JD analysis step and speed up generation.
POST /v1/resumes/score-fit — Score how well the candidate fits a job. Body: jobTitle, jobDescription, optional companyName. Returns { matchScore: 0–100, matchRationale }. Synchronous.
Account
GET /v1/usage — Returns plan name, monthly limits (resumeGenerationsPerMonth, profileBuildsPerMonth, documentsPerPartner) and current usage counters, plus billing period dates.
GET /v1/health — Health check. Returns { status: "ok", timestamp }.
Key constraints to surface in Pipedream
resumes/generate and profile/build both return 202 Accepted immediately — the work happens asynchronously. Any Pipedream action that calls these needs a subsequent polling step to wait for completion.
resumes/generate returns 409 if profile is still processing, and 400 if no profile exists yet — the polling trigger for "profile build complete" feeds directly into this.
analyze-jd is synchronous (blocks until the AI finishes) so it can be used inline before a generate action.
score-fit is also synchronous.
Document upload enforces both a per-partner document count limit and a total character limit — both return 402 quota errors.
Contributor guide
Assessment
This issue has not been assessed yet.