API
Welcome to useResume API - a platform for programmatically generating professional, ATS-optimized resume PDFs. Integrate resume creation capabilities directly into your applications and workflows. The platform also offers AI-powered tailoring to automatically optimize resumes and cover letters for specific job postings.
Professional Templates
Multiple ATS-friendly resume and cover letter designs
AI-Powered Tailoring
Optimize documents for specific job postings
Flexible Styling
Customize fonts, colors, layouts, and formatting
Global Support
Multiple languages, date formats, and page sizes
All API requests require authentication via API key. Generate your API key from the dashboard after registration and include it in the Authorization header as a Bearer token for all requests.
The API uses a credit-based system. Each successfully generated PDF consumes 1 credit, regardless of template. Tailored resumes and cover letters consume 5 credits. API calls that don't result in a PDF (such as validation errors) do not consume credits.
Generated files are stored for 14 days, but download URLs expire after 24 hours - download your files promptly after generation.
Every error response from the v3 API uses the same JSON envelope. Branch on the code field for stable handling, and show message to end users. Failed requests never consume credits, so retrying after a fix is safe.
The two error codes you will hit most often are INVALID_JSON when the request body cannot be parsed, and REQUEST_VALIDATION_FAILED when the body parses but a field fails schema checks. In the validation case, the response includes a field_errors array with the exact path that failed.
1{
2 "success": false,
3 "error": "Request validation failed",
4 "message": "Request validation failed",
5 "code": "REQUEST_VALIDATION_FAILED",
6 "details": "content.passport_or_id: Expected string, received null",
7 "field_errors": [
8 {
9 "path": "content.passport_or_id",
10 "message": "Expected string, received null",
11 "code": "invalid_type"
12 }
13 ]
14}Common error codes
| Status | Code | When it happens |
|---|---|---|
| 400 | INVALID_JSON | The request body could not be parsed as JSON, so field-level validation never ran. |
| 400 | REQUEST_VALIDATION_FAILED | The JSON body was valid, but one or more fields failed schema validation. Check field_errors[]. |
| 401 | MISSING_AUTHORIZATION_HEADER | The Authorization header is missing. Send 'Authorization: Bearer ur_...'. |
| 401 | INVALID_API_KEY | The API key could not be found, was deleted, or was mistyped. |
| 401 | KEY_EXPIRED | The API key exists, but its expiry date has passed. |
| 402 | INSUFFICIENT_CREDITS | The endpoint costs more credits than the account currently has available. |
| 404 | ENDPOINT_NOT_FOUND | The /api/v3 route or method is not supported. |
| 404 | RUN_NOT_FOUND | No run with that ID exists for the authenticated API account. |
| 429 | RATE_LIMIT_EXCEEDED | The account exceeded the per-second request limit. |
| 500 | CREDIT_RESERVATION_FAILED | The platform could not reserve credits before processing the request. |
| 500 | PROCESSING_ERROR | The request began processing but failed before completion. Reserved credits are refunded when possible. |
| 500 | RUN_LOOKUP_FAILED | The run lookup failed before a response could be assembled. |
| 500 | INTERNAL_ERROR | Unexpected server-side failure. |
Body
Response
Returns an object with a time-limited signed URL to download the resume PDF. The URL expires in 24 hours. Download the file promptly after generation.
1const response = await fetch("https://useresume.ai/api/v3/resume/create", {
2 method: "POST",
3 headers: {
4 "Authorization": `Bearer ${process.env.USERESUME_API_KEY}`,
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 content: {
9 name: "John Doe",
10 role: "Software Engineer",
11 email: "john.doe@example.com",
12 phone: "+1234567890",
13 address: "New York, NY",
14 summary: "Experienced software engineer with 5+ years building scalable web applications.",
15 employment: [
16 {
17 title: "Senior Software Engineer",
18 company: "Tech Corp",
19 location: "New York, NY",
20 start_date: "2020-01-01",
21 present: true
22 }
23 ],
24 skills: [
25 {
26 name: "JavaScript",
27 proficiency: "Expert",
28 display_proficiency: true
29 },
30 {
31 name: "React",
32 proficiency: "Advanced",
33 display_proficiency: true
34 }
35 ]
36 },
37 style: {
38 template: "default",
39 template_color: "blue",
40 font: "inter",
41 page_padding: 1.54,
42 page_format: "a4",
43 date_format: "LLL yyyy",
44 background_color: "white",
45 profile_picture_radius: "rounded-full"
46 }
47 })
48});
49const result = await response.json();1{
2 success: true,
3 data: {
4 file_url: "https://useresume-platform.com/resume/john-doe-resume.pdf",
5 file_url_expires_at: 1728388800000,
6 file_expires_at: 1728388800000,
7 file_size_bytes: 251904
8 },
9 meta: {
10 run_id: "run_123456789",
11 credits_used: 1,
12 credits_remaining: 499
13 }
14};Body
Response
Returns an object with a time-limited signed URL to download the resume PDF. The URL expires in 24 hours. Download the file promptly after generation.
1const response = await fetch("https://useresume.ai/api/v3/resume/create-tailored", {
2 method: "POST",
3 headers: {
4 "Authorization": `Bearer ${process.env.USERESUME_API_KEY}`,
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 resume_content: {
9 content: {
10 name: "John Doe",
11 role: "Software Engineer",
12 email: "john.doe@example.com",
13 phone: "+1234567890",
14 address: "New York, NY",
15 summary: "Experienced software engineer with 5+ years building scalable web applications.",
16 employment: [
17 {
18 title: "Senior Software Engineer",
19 company: "Tech Corp",
20 location: "New York, NY",
21 start_date: "2020-01-01",
22 present: true
23 }
24 ],
25 skills: [
26 {
27 name: "JavaScript",
28 proficiency: "Expert",
29 display_proficiency: true
30 },
31 {
32 name: "React",
33 proficiency: "Advanced",
34 display_proficiency: true
35 }
36 ]
37 },
38 style: {
39 template: "default",
40 template_color: "blue",
41 font: "inter",
42 page_padding: 1.54,
43 page_format: "a4",
44 date_format: "LLL yyyy",
45 background_color: "white",
46 profile_picture_radius: "rounded-full"
47 }
48 },
49 target_job: {
50 job_title: "Senior Software Engineer",
51 job_description: "We are looking for a Senior Software Engineer to join our team. The ideal candidate will have experience with JavaScript, React, Node.js, and cloud technologies. You will be responsible for developing scalable web applications and mentoring junior developers."
52 }
53 })
54});
55const result = await response.json();1{
2 success: true,
3 data: {
4 file_url: "https://useresume-platform.com/resume/john-doe-resume.pdf",
5 file_url_expires_at: 1728388800000,
6 file_expires_at: 1728388800000,
7 file_size_bytes: 251904
8 },
9 meta: {
10 run_id: "run_123456789",
11 credits_used: 5,
12 credits_remaining: 495
13 }
14};Body
Response
Returns a JSON object with the resume data object or data markdown string.
1const response = await fetch("https://useresume.ai/api/v3/resume/parse", {
2 method: "POST",
3 headers: {
4 "Authorization": `Bearer ${process.env.USERESUME_API_KEY}`,
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 file: "JVBERi0xLjcKCjEgMCBvYmo=...",
9 parse_to: "json"
10 })
11});
12const result = await response.json();1{
2 success: true,
3 data: {
4 name: "John Doe",
5 email: "john.doe@example.com",
6 phone: "1234567890",
7 address: "123 Main St, Anytown, USA",
8 summary: "A brief summary of the resume",
9 role: "Software Engineer",
10 links: [
11 {
12 url: "https://www.linkedin.com/in/john-doe",
13 name: "LinkedIn"
14 }
15 ],
16 employment: [
17 {
18 start_date: "2020-01-01",
19 end_date: "2022-01-01",
20 present: false,
21 title: "Software Engineer",
22 company: "Google",
23 location: "San Francisco, CA",
24 short_description: "A brief description of the role",
25 responsibilities: [
26 {
27 text: "Developed and maintained web applications"
28 }
29 ]
30 }
31 ],
32 skills: [
33 {
34 name: "JavaScript",
35 proficiency: "Expert"
36 }
37 ],
38 education: [
39 {
40 start_date: "2020-01-01",
41 end_date: "2022-01-01",
42 present: false,
43 degree: "Bachelor of Science",
44 institution: "University of California, Berkeley",
45 location: "San Francisco, CA",
46 short_description: "A brief description of the education",
47 achievements: [
48 {
49 text: "Developed and maintained web applications"
50 }
51 ]
52 }
53 ],
54 certifications: [
55 {
56 start_date: "2020-01-01",
57 end_date: "2022-01-01",
58 present: false,
59 name: "Certification 1",
60 institution: "University of California, Berkeley"
61 }
62 ],
63 languages: [
64 {
65 language: "English",
66 proficiency: "Fluent"
67 }
68 ],
69 references: [
70 {
71 name: "John Doe",
72 title: "Software Engineer",
73 company: "Google",
74 email: "john.doe@example.com",
75 phone: "1234567890"
76 }
77 ],
78 projects: [
79 {
80 name: "Project 1",
81 short_description: "A brief description of the project",
82 present: false,
83 start_date: "2020-01-01",
84 end_date: "2022-01-01"
85 }
86 ],
87 activities: [
88 {
89 name: "Activity 1",
90 short_description: "A brief description of the activity"
91 }
92 ],
93 date_of_birth: "1990-01-01",
94 marital_status: "Single",
95 nationality: "American",
96 passport_or_id: "1234567890",
97 visa_status: "H1B",
98 pronouns: "He/Him"
99 },
100 meta: {
101 run_id: "run_123456789",
102 credits_used: 4,
103 credits_remaining: 496
104 }
105};Body
Response
Returns an object with a time-limited signed URL to download the cover letter PDF. The URL expires in 24 hours. Download the file promptly after generation.
1const response = await fetch("https://useresume.ai/api/v3/cover-letter/create", {
2 method: "POST",
3 headers: {
4 "Authorization": `Bearer ${process.env.USERESUME_API_KEY}`,
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 content: {
9 name: "John Doe",
10 address: "123 Main St, Anytown, USA",
11 email: "john.doe@example.com",
12 phone: "+1234567890",
13 role: "Software Engineer",
14 hiring_manager_name: "Jane Smith",
15 hiring_manager_company: "Acme Corporation",
16 text: "Dear Hiring Manager,\nI am writing to express my strong interest in the Software Engineer position at Acme Corporation. With over 5 years of experience in full-stack development, I am confident that my skills and passion for innovation make me an ideal candidate for this role.\nThroughout my career, I have demonstrated expertise in building scalable web applications and collaborating with cross-functional teams. I am particularly excited about the opportunity to contribute to your team's mission of delivering cutting-edge solutions.\nThank you for considering my application. I look forward to the opportunity to discuss how my background and skills align with your needs.\nSincerely,\nJohn Doe"
17 },
18 style: {
19 template: "nova",
20 template_color: "blue",
21 font: "inter",
22 page_padding: 1.54,
23 document_language: "en",
24 page_format: "a4",
25 background_color: "white"
26 }
27 })
28});
29const result = await response.json();1{
2 success: true,
3 data: {
4 file_url: "https://useresume-platform.com/cover-letter/john-doe-cover-letter.pdf",
5 file_url_expires_at: 1728388800000,
6 file_expires_at: 1728388800000,
7 file_size_bytes: 251904
8 },
9 meta: {
10 run_id: "run_123456789",
11 credits_used: 1,
12 credits_remaining: 499
13 }
14};Body
Response
Returns an object with a time-limited signed URL to download the tailored cover letter PDF. The URL expires in 24 hours. Download the file promptly after generation.
1const response = await fetch("https://useresume.ai/api/v3/cover-letter/create-tailored", {
2 method: "POST",
3 headers: {
4 "Authorization": `Bearer ${process.env.USERESUME_API_KEY}`,
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 cover_letter_content: {
9 content: {
10 name: "John Doe",
11 address: "123 Main St, Anytown, USA",
12 email: "john.doe@example.com",
13 phone: "+1234567890",
14 role: "Software Engineer",
15 hiring_manager_name: "Jane Smith",
16 hiring_manager_company: "Acme Corporation",
17 text: "Dear Hiring Manager,\nI am writing to express my strong interest in the Software Engineer position at Acme Corporation. With over 5 years of experience in full-stack development, I am confident that my skills and passion for innovation make me an ideal candidate for this role.\nThroughout my career, I have demonstrated expertise in building scalable web applications and collaborating with cross-functional teams. I am particularly excited about the opportunity to contribute to your team's mission of delivering cutting-edge solutions.\nThank you for considering my application. I look forward to the opportunity to discuss how my background and skills align with your needs.\nSincerely,\nJohn Doe"
18 },
19 style: {
20 template: "nova",
21 template_color: "blue",
22 font: "inter",
23 page_padding: 1.54,
24 document_language: "en",
25 page_format: "a4",
26 background_color: "white"
27 }
28 },
29 target_job: {
30 job_title: "Senior Software Engineer",
31 job_description: "We are looking for a Senior Software Engineer to join our team. The ideal candidate will have experience with JavaScript, React, Node.js, and cloud technologies. You will be responsible for developing scalable web applications and mentoring junior developers."
32 }
33 })
34});
35const result = await response.json();1{
2 success: true,
3 data: {
4 file_url: "https://useresume-platform.com/cover-letter/john-doe-cover-letter.pdf",
5 file_url_expires_at: 1728388800000,
6 file_expires_at: 1728388800000,
7 file_size_bytes: 251904
8 },
9 meta: {
10 run_id: "run_123456789",
11 credits_used: 5,
12 credits_remaining: 495
13 }
14};Body
Response
Returns a JSON object with the cover letter data object or data markdown string.
1const response = await fetch("https://useresume.ai/api/v3/cover-letter/parse", {
2 method: "POST",
3 headers: {
4 "Authorization": `Bearer ${process.env.USERESUME_API_KEY}`,
5 "Content-Type": "application/json"
6 },
7 body: JSON.stringify({
8 file: "JVBERi0xLjcKCjEgMCBvYmo=...",
9 parse_to: "json"
10 })
11});
12const result = await response.json();1{
2 success: true,
3 data: {
4 name: "John Doe",
5 email: "john.doe@example.com",
6 phone: "1234567890",
7 address: "123 Main St, Anytown, USA",
8 text: "Dear Hiring Manager,\nI am writing to express my strong interest in the Software Engineer position at Acme Corporation. With over 5 years of experience in full-stack development, I am confident that my skills and passion for innovation make me an ideal candidate for this role.\nThroughout my career, I have demonstrated expertise in building scalable web applications and collaborating with cross-functional teams. I am particularly excited about the opportunity to contribute to your team's mission of delivering cutting-edge solutions.\nThank you for considering my application. I look forward to the opportunity to discuss how my background and skills align with your needs.\nSincerely,\nJohn Doe",
9 hiring_manager_company: "Acme Corporation",
10 hiring_manager_name: "Jane Smith",
11 role: "Software Engineer"
12 },
13 meta: {
14 run_id: "run_123456789",
15 credits_used: 4,
16 credits_remaining: 496
17 }
18};Body
No body parameters
Response
Returns an object with run details, including a signed URL to download the generated file if the file did not expire. The signed URL will expire in 24 hours.
1const response = await fetch("https://useresume.ai/api/v3/run/get/run_123", {
2 method: "GET",
3 headers: {
4 "Authorization": `Bearer ${process.env.USERESUME_API_KEY}`
5 }
6});
7const result = await response.json();1{
2 success: true,
3 data: {
4 id: "run_123",
5 created_at: 1728388800000,
6 endpoint: "resume/create",
7 api_platform_user_id: "user_123",
8 credits_used: 1,
9 status: "success",
10 file_url: "https://useresume-platform.com/{document_type}/abc123.pdf",
11 file_url_expires_at: 1728388800000,
12 file_expires_at: 1728388800000,
13 file_size_bytes: 251904
14 }
15};