Build an AI Resume Tailor & Cover Letter Writer with Custom Gateway Endpoints
In today's competitive job market, sending one generic resume to hundreds of job postings rarely gets interviews. Recruiters use Applicant Tracking Systems (ATS) to filter candidates on keyword relevance, required technical skills, and role-specific achievements.
Manually tweaking your resume and writing a personalised cover letter for every application can take 20 to 30 minutes each. In this tutorial, we will build an automated AI Resume Tailor and Cover Letter Generator using Python and Velona's AI Gateway. Each tailored application costs well under ₹1.
How the AI Application Assistant Works
The system takes two inputs: your master resume text and a target job description. It then runs a two-stage workflow:
- ATS Keyword Alignment: The AI reads the job description, spots which of your real skills match, and rephrases your experience bullets to highlight them, without inventing qualifications.
- Cover Letter Synthesis: The AI drafts a role-specific cover letter connecting your actual achievements to the company's needs.
Step 1: Set Up Your Velona Account and API Key
One Velona key gives you models from Anthropic, OpenAI, DeepSeek and more:
- Sign up on the Velona Registration Page.
- Go to your Prepaid Wallet Dashboard and top up starting at ₹10 using UPI (GPay, PhonePe) or RuPay. You pay per use in rupees, with no subscription.
- Open API Key Management and create a key named
resume-tailor-app. - Set a budget on the key to keep testing costs predictable.
Step 2: Build the Resume Tailor in Python
Create a script named resume_tailor.py. Both stages call Velona's native endpoint (/gateway/v1/inference/run) through one small helper.
import os
import requests
VELONA_API_KEY = os.environ["VELONA_API_KEY"]
VELONA_URL = "https://velona.in/gateway/v1/inference/run"
HEADERS = {
"Authorization": f"Bearer {VELONA_API_KEY}",
"Content-Type": "application/json",
}
TAILOR_MODEL = "anthropic/claude-haiku-4.5"
LETTER_MODEL = "openai/gpt-4o-mini"
def ask(model: str, prompt: str) -> str:
res = requests.post(
VELONA_URL,
headers=HEADERS,
json={"model": model, "turns": [{"role": "user", "content": prompt}]},
timeout=90,
)
res.raise_for_status()
# The native endpoint returns the reply text in data.output
return res.json()["data"]["output"]
MASTER_RESUME = """
Jane Doe | Full-Stack Software Engineer
Skills: Python, FastAPI, React, PostgreSQL, Docker, AWS
Experience:
- Developed RESTful microservices in Python serving 50k daily active users.
- Designed database schemas in PostgreSQL and optimized slow queries by 40%.
- Integrated third-party payment gateways and billing webhooks.
"""
JOB_DESCRIPTION = """
Senior Backend Developer at FinTech Startup
Requirements:
- Strong expertise in Python (FastAPI / Django) and API security.
- Experience with payment processing, UPI gateways, and transaction ledgering.
- Hands-on experience with database indexing and query optimization in PostgreSQL.
"""
def tailor_resume(resume_text: str, job_text: str) -> str:
prompt = f"""You are an expert technical recruiter and ATS specialist.
Compare the Master Resume against the Job Description.
Rephrase the experience bullets to emphasise skills the job asks for
(such as payment processing, API security, and database optimisation).
IMPORTANT: Do NOT invent experience or change job titles. Keep every fact accurate.
At the end, list any job requirements the candidate does not yet show.
Master Resume:
{resume_text}
Job Description:
{job_text}
Return the output as Markdown."""
return ask(TAILOR_MODEL, prompt)
def generate_cover_letter(resume_text: str, job_text: str) -> str:
prompt = f"""You are an experienced career advisor.
Write a professional, 3-paragraph cover letter for this position.
Use only achievements present in the resume.
Resume:
{resume_text}
Job Description:
{job_text}
Keep the tone confident and concise, focused on how the candidate's backend
experience solves the company's technical needs."""
return ask(LETTER_MODEL, prompt)
if __name__ == "__main__":
print("--- Tailored Resume ---\n")
print(tailor_resume(MASTER_RESUME, JOB_DESCRIPTION))
print("\n--- Cover Letter ---\n")
print(generate_cover_letter(MASTER_RESUME, JOB_DESCRIPTION))
Prefer the OpenAI SDK? Use OpenAI(base_url="https://velona.in/v1", api_key=...) with the same model IDs. See how to use an AI API with Python.
Selecting Models and What It Costs
A resume plus job description is about 550 input tokens; the tailored resume is about 600 output tokens and the cover letter about 450. Prices are from the Velona pricing page at the time of writing:
| Setup | Tailoring | Cover letter | Per application | Applications per ₹10 |
|---|---|---|---|---|
| Budget: GPT-4o Mini for both | ₹0.05 | ₹0.04 | ₹0.08 | about 120 |
| Default: Claude Haiku 4.5 + GPT-4o Mini | ₹0.37 | ₹0.04 | ₹0.41 | about 24 |
| Premium: Claude Sonnet 5 for both | ₹0.74 | ₹0.58 | ₹1.32 | about 7 |
Claude models are careful about not inventing facts, which matters most for the tailoring step. GPT-4o Mini writes clean, confident letters at a fraction of the price. For the full picture on Claude pricing in rupees, see Claude API in India: price in ₹ and how to pay with UPI.
Developer Utilities and Testing
When checking word counts or converting the Markdown output to HTML, use Velona's free developer tools such as the Character Counter and Markdown Editor. They run in your browser and never touch your wallet.
To compare how different models rewrite the same resume, run them side by side in the Model Evaluator.
Conclusion
Automating application tailoring saves hours during a job search and produces resumes that reflect what each role asks for, without stretching the truth. With Velona, Indian students and developers can build career tools on top models and pay with a UPI top-up.
Ready to build your own resume tailor? Create a free Velona account, add ₹10, and tailor your next application in seconds.