Apply can submit an application on your behalf. Check the job URL, resume, and instructions before you start a run.
Apply from the dashboard
1
Open Job Application Recipes
Go to Recipes → Job Applications in Skyvern Cloud.
2
Add the job and resume
Paste the Job URL. Upload one PDF resume, up to 10 MiB, or select Use a URL instead to provide a publicly accessible resume URL.
3
Add instructions and facts
Use Instructions to describe how Skyvern should complete the application. Use Your information for facts such as work authorization, location, or expected salary. Both fields are optional.Skyvern parses your resume to help answer application questions. Values in Your information override matching values from the resume. You can enter text or JSON.
4
Add login details if needed
Select This job site requires a login to enter a username and password. When you provide credentials, select Save this login for future applications on this site to allow Skyvern to store them.If the site uses two-factor authentication, enable Uses 2FA? and supply your configured 2FA identifier when needed.
5
Start and track the application
Open Advanced options to edit Terminate if or Error code mapping. The defaults stop an application when the posting explicitly says it is closed and classify that outcome as
job_expired. Use Reset to defaults to restore both settings.Submit the form, then open the returned run link. The Runs panel lists applications and job extractions with their status.Use the API
Get your API key from Settings and set it in your shell:x-api-key header on every request. The three job endpoints appear in the Recipes section of the API reference.
Extract a job posting
Extract a job application posting accepts a JSON body withjob_url:
extract_output.extracted_information object includes availability: closed for explicit closure, open for evidence that applications are accepted, or unknown when the page is ambiguous. Readable details remain in that object. Closure does not itself make Extract fail.
Apply with a resume URL
Apply to a job accepts JSON withjob_url, resume_url, and custom_prompt. Include custom_prompt even when you have no instructions; use an empty string.
Apply with a file upload
Usemultipart/form-data to upload a local resume. Supply resume_file instead of resume_url:
Content-Type header and boundary. Send each field once, and use exactly one resume source per request.
The API supports PDF, DOCX, and image resumes. The default upload limit is 30 MiB. Skyvern uses OCR when a PDF has no extractable text. If resume parsing fails, the application continues using the remaining inputs.
Both Apply request formats return only workflow_run_id. Check the run result to determine whether the application was submitted.
Configure termination and error codes
Apply accepts two optional settings in either request format. If you omit them, it uses these defaults:terminate_criterion tells the agent when to stop. error_code_mapping defines the codes that the failure classifier may return. Keep both when you want early stopping and a stable code. A prompt alone does not define a machine-readable error code.
The settings are independent. Clearing a rule does not clear the mapping, and clearing the mapping does not clear the rule. Use a JSON object with nonempty string keys and string descriptions for the mapping. Only configured codes can be returned; replacing the mapping can remove
job_expired.
In multipart requests, send the criterion as text and the mapping as JSON text:
null or {} to disable the multipart mapping, or an empty criterion field to disable the rule. In the dashboard, clear Terminate if or enter null or {} in Error code mapping. Advanced settings apply to each URL in a bulk submission and are not saved in browser storage.
Apply checks closure when it observes the posting; resume parsing or login may already have occurred. The default rule applies only to explicit expiry, closure, filled positions, or statements that applications are no longer accepted. A missing button, redirect, or HTTP 404 alone is insufficient. Editing or disabling the rule uses agent execution when a deterministic adapter cannot represent it.
Supply credentials and a 2FA identifier
For a site that needs login, add these fields to the JSON Apply body:username and password together. persist_credentials: true is required when you supply them and authorizes Skyvern to store the login for future use. Omit all three fields when no login is needed. 2fa_identifier is optional.
For multipart requests, send these values as text fields. Use the lowercase text true for persist_credentials:
Track runs and results
Use the returned ID with Get run info by id:status, failure_reason, and errors fields. A classified expiry has error_code: "job_expired", with reasoning and confidence_float, in errors. The same fields use the normal workflow webhook payload. Classification only returns configured codes when it can identify a match; an empty errors list is not proof that a posting is open. Extract availability appears in the normal workflow outputs, not in the recipe run list.
To list recipe runs for your organization, use List job recipe runs:
apply or extract), status, creation time, job URL, and failure reason when available. The response also includes page, page_size, and has_next. Increment page while has_next is true. Page size must be between 1 and 100.
Each Apply API request creates a new run. Repeating a request can submit another application, so check the original run before retrying.
Credits
For organizations billed in recipe credits, each admitted execution attempt costs 50 credits ($0.05). Login, extraction, and application attempts are billed separately. Retries and fallback attempts also cost 50 credits each, including attempts that fail or are canceled after admission. Resume parsing has no separate recipe charge. The launch check requires the following balance when overage is disabled:
The range depends on the execution path selected for the job site and your inputs. The launch check does not debit credits. These balances and the dashboard estimate are not maximum prices; the final charge depends on the attempts executed.
Handle request errors
Request validation rejects unknown fields. JSON credentials require the boolean
true for persist_credentials; multipart credentials require the text true.
Use the Recipes API reference for the full request and response schemas.
