Csod APImellenu.csod.com ↗
Retrieve the full structure of Mellenu career site application forms — pages, sections, fields, required flags, and pre-screening questions — for any job requisition.
What is the Csod API?
The Mellenu Application Form API exposes 1 endpoint, get_application_form, that returns the complete workflow structure of a job application on the Mellenu CSOD career site. A single call returns the ordered pages and sections of a requisition's form, all field definitions with required flags, pre-screening questions with answer options, and the display title of the job — giving you everything needed to understand or replicate the candidate-facing application experience.
curl -X GET 'https://api.parse.bot/scraper/ae055d30-491c-4e7b-8002-5191dbd01b98/get_application_form?career_site_id=5&requisition_id=331' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace mellenu-csod-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Mellenu Careers application form structure inspection."""
from parse_apis.mellenu_csod_com_api import MellenuCareers, ApplicationFormNotFound
client = MellenuCareers()
# Fetch the full application form for a specific job requisition.
try:
form = client.application_forms.get(requisition_id="331", career_site_id="5")
except ApplicationFormNotFound:
print("Requisition not found or has no application workflow.")
raise
print(f"{form.job_title} — {form.total_pages} page(s)")
# Walk every page and section to see what the applicant must fill out.
for page in form.pages:
print(f"\n— Page {page.page} —")
for section in page.sections:
print(f" [{section.type}] {section.title}")
# Show required fields in this section.
for field in section.fields:
if field.required:
print(f" field (required): {field.label}")
# Show questions and their answer options.
for question in section.questions:
opts = ", ".join(o.text for o in question.options) if question.options else "free-text"
print(f" question: {question.text} ({opts})")
# Country pick-list appears on resume/contact sections.
if section.country_options:
print(f" country options: {len(section.country_options)} entries")
print("\nexercised: application_forms.get")
Returns the full application workflow for one job requisition as an ordered list of pages, each holding ordered sections. Section types observed: contactInformation (first name, last name, e-mail), note (HTML notice text), resume (resume upload, cover letter, additional attachments, phone number and the country pick-list under country_options), prescreeningQuestions (questions with type, required flag and answer options), disclaimer (agree/disagree with its error message) and submit (opt-in toggle). Every page of the workflow is walked in one call (the site reports total_pages; two pages for the representative posting). A requisition with no application workflow returns a stale_input/input_not_found error. Read-only: nothing is submitted. Fields carry the site's own key names; HTML in instruction texts is returned as-is.
| Param | Type | Description |
|---|---|---|
| career_site_id | string | Numeric career site id from the job posting URL (.../careersite/<id>/...). |
| requisition_id | string | Numeric job requisition id as it appears in the job posting URL (.../requisition/<id>). |
{
"type": "object",
"fields": {
"pages": "array of {page, sections[]}; each section has action_id, type, title, instruction (HTML), note, fields[] ({name, label, required, and per-type extras such as visible, instructions, error_message}), questions[] ({question_id, type, text, required, hidden, options[{response_id, text}]}); resume sections add country_options[{code, name}] and contactInformation adds apply_with_integrations[]",
"job_title": "display title of the job posting (null if the job details lookup fails)",
"total_pages": "integer number of workflow pages reported by the site",
"career_site_id": "career site id echoed as a string",
"requisition_id": "requisition id echoed as a string"
},
"sample": {
"data": {
"pages": [
{
"page": 1,
"sections": [
{
"note": "",
"type": "contactInformation",
"title": "Contact information",
"fields": [
{
"name": "firstName",
"label": "First name",
"required": true
},
{
"name": "lastName",
"label": "Last name",
"required": true
},
{
"name": "email",
"label": "E-mail",
"required": true
}
],
"action_id": 0,
"questions": [],
"instruction": "",
"apply_with_integrations": [
"LinkedIn"
]
},
{
"note": "",
"type": "resume",
"title": "Upload Resume and Cover Letter",
"fields": [
{
"name": "resume",
"label": "Resume",
"required": true
},
{
"name": "coverLetter",
"label": "Cover letter",
"visible": true,
"required": false
},
{
"name": "phoneNumber",
"label": "Phone number",
"required": true
},
{
"name": "attachment_181",
"label": "Additional attachment",
"required": false,
"instructions": "Please attach any additional documents to be considered for your application"
}
],
"action_id": 1478,
"questions": [],
"instruction": "Please upload your resume and cover letter.",
"country_options": [
{
"code": "ESP",
"name": "Spain"
}
]
}
]
},
{
"page": 2,
"sections": [
{
"note": "",
"type": "prescreeningQuestions",
"title": "Tell us a few words about yourself and why you would be great candidate for this role?",
"fields": [],
"action_id": 1482,
"questions": [
{
"text": "Are you a member of an EU state? Or do you have current work required permit to work in the country where the position is advertised?",
"type": "YesNo",
"hidden": false,
"options": [
{
"text": "Yes",
"response_id": "39-True"
},
{
"text": "No",
"response_id": "39-False"
}
],
"required": false,
"question_id": 39
}
],
"instruction": ""
},
{
"note": "",
"type": "disclaimer",
"title": "Disclaimer",
"fields": [
{
"name": "agree",
"label": "agreeOrDisagree",
"required": true,
"error_message": "You have not agreed to the disclamer and therefore your cannot continue to submit your application!"
}
],
"action_id": 1483,
"questions": [],
"instruction": "<p>By submitting your application and CV, you consent to ... processing your data.</p>"
},
{
"note": "",
"type": "submit",
"title": "Submit application",
"fields": [
{
"name": "optIn",
"label": "Opt in to communications",
"visible": true,
"required": false
}
],
"action_id": 1484,
"questions": [],
"instruction": ""
}
]
}
],
"job_title": "Debt Collection Analyst",
"total_pages": 2,
"career_site_id": "5",
"requisition_id": "331"
},
"status": "success"
}
}About the Csod API
What the API Returns
The get_application_form endpoint accepts two optional parameters — career_site_id and requisition_id — both derived directly from the job posting URL (e.g., .../careersite/5/home/requisition/331). The response includes a pages array representing the ordered steps of the application workflow, a total_pages integer, and the job_title string pulled from the posting. Both IDs are echoed back as career_site_id and requisition_id strings for easy correlation.
Pages, Sections, and Fields
Each entry in pages carries a page index and a sections array. Sections are typed: contactInformation holds standard identity fields (first name, last name, email); note sections carry HTML notice text; resume sections cover resume upload, cover letter, and additional attachments; pre-screening sections contain question fields with discrete answer options. Every field object includes name, label, required (boolean), and — where applicable — an options array. Section objects also carry action_id, type, title, instruction (HTML), and note metadata.
Coverage Scope
The API targets the Mellenu instance of Cornerstone OnDemand (CSOD), accessible at mellenu.csod.com. It covers career site ID 5 by default but accepts any numeric career_site_id present in the Mellenu portal URLs. Requisition IDs map one-to-one to individual job postings. If the job details lookup fails for a given requisition, job_title returns null while the form structure is still returned.
The Csod API is a managed, monitored endpoint for mellenu.csod.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when mellenu.csod.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official mellenu.csod.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Mirror Mellenu application form fields in an internal ATS or candidate portal to reduce re-entry.
- Audit required vs. optional fields across multiple Mellenu requisitions to standardize recruiting workflows.
- Extract pre-screening questions and answer options to build pre-qualification chatbots or screeners.
- Generate a candidate preparation guide listing every section and field before they submit.
- Validate that a programmatic application payload covers all required fields before submission.
- Map Mellenu form sections to a unified schema when aggregating application structures from multiple employers.
- Track changes to application form structure over time by diffing responses across requisition IDs.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Mellenu or Cornerstone OnDemand offer an official developer API for job application forms?+
What does `get_application_form` return for a requisition whose job details lookup fails?+
pages structure, total_pages, and the echoed career_site_id and requisition_id. Only the job_title field comes back as null. The form workflow data itself is unaffected.Does the API return the actual candidate submissions or application responses already on file?+
Can the API retrieve application forms from other CSOD-hosted career sites beyond Mellenu?+
Are there any field types or section types that might not appear in every requisition's response?+
sections array reflects only what the specific requisition's form defines, so the set of field types in any one response depends on how that posting was configured.