CEIPAL ATS API V2 Reference | Developer Documentation Explore CEIPAL ATS API V2 documentation, including authentication, webhook events, job postings, applicants, submissions, placements, and integration capabilities. ## Sections • [Ceipal ATS v2 API Documentation](https://developer.ceipal.com/ceipal-ats-v2/ceipal-ats-v2-api-reference.md): Welcome to CEIPAL ATS v2 API This API enables customers to extract data from their CEIPAL account and build customized solutions. • [v1 to v2 Migration](https://developer.ceipal.com/ceipal-ats-v2/v1-to-v2-migration.md): Migrating from v1 to v2 of the CEIPAL ATS API is straightforward. This guide walks you through every change so your integration keeps working smoothly with improved performance, stronger security, and more predictable responses. Important: To use the CEIPAL V2 APIs, please ensure you follow all the steps outlined in this guide. Each step is required to ensure your integration works correctly with the new version. 1. URL Structure Update your base URL from /v1/ to /v2/ . A trailing slash is now required on all endpoints — requests without it will not be accepted. Title Description Version URL V1 https://api.ceipal.com/v1/createAuthtoken V2 https://api.ceipal.com/v2/createAuthtoken/ 2. Request Parameter Naming All request parameters have been renamed from snake_case to camelCase . Update the parameters you send in your API requests. Title Description V1 (snake_case) V2 (camelCase) assigned_recruiter assignedRecruiter created_modified_after modifiedAfter created_modified_before modifiedBefore created_at createdAt 3. Resume Token — Secure Document Download In V1, resume download links never expired. In V2, a resumeToken is returned that expires after 30 minutes , keeping candidate documents secure. How to download a resume in V2: Step 1 — Call the List or Detail API. The response will include a resumeToken . Step 2 — Send a POST request to /v2/documentDownload/ with the token within 30 minutes. POST /v2/documentDownload/ Body: { "resumeToken": "eyJ...{encrypted}" } Note: If the token has expired, the API returns HTTP 410 Gone . Call the API again to get a fresh token. 4. Enhanced Encryption V2 uses AES-256-CBC — an industry-standard encryption algorithm. This replaces the simpler encryption used in V1 and ensures your data exchange meets modern security standards. 5. Consistent Error Handling V1 sometimes returned HTTP 200 OK even when errors occurred. V2 now returns proper HTTP status codes, making error handling simpler and more reliable. Title Description Title Scenario V1 V2 Bad request 200 OK (error in body) 400 Bad Request Unauthorized Inconsistent 401 Unauthorized Not found Inconsistent 404 Not Found Expired token Not applicable 410 Gone 6. POST Endpoint Responses All POST endpoints now return a structured JSON response including a status code, encrypted record ID, status, timestamp, and a confirmation message. { "statusCode" : 201 , " jobId ": "WmFsNWNhTkd...", "status": "created", "createdAt": "2026-04-01 10:00:00", "message": "Job created successfully." } Using returned IDs with Detail APIs: The encrypted IDs returned in List API responses can be passed directly in the URL path to the corresponding Detail API — no query parameters needed. Title Description Title Detail API V1 V2 Job Details /v1/getJobPostingDetails/?job_id={id} /v2/getJobPostingDetails/{jobId}/ Applicant Details /v1/getApplicantDetails/?applicant_id={id} /v2/getApplicantDetails/{applicantId}/ Client Details /v1/getClientDetails/?client_id={id} /v2/getClientDetails/{clientId}/ Lead Details /v1/getLeadDetails/?lead_id={id} /v2/getLeadDetails/{leadId}/ Submission Details /v1/getSubmissionDetails/?submission_id={id} /v2/getSubmissionDetails/{submissionId}/ Migration Checklist Before going live with v2, make sure you have completed the following: [ ] Updated all endpoint URLs from /v1/ to /v2/ with trailing slash [ ] Renamed all request parameters from snake_case to camelCase [ ] Updated resume download logic to use the two-step resumeToken flow [ ] Updated error handling to use standard HTTP status codes [ ] Updated POST response parsing to read statusCode , createdAt , and encrypted ID fields • [Authentication](https://developer.ceipal.com/ceipal-ats-v2/authentication.md): The CEIPAL API uses a combination of Username , Password , and an API Key to authenticate and generate a Bearer Token . This Bearer Token is required to access all API endpoints. Your API keys carry significant privileges, so they must be kept secure. Do not share your secret API keys. CEIPAL also provides an option to rotate API credentials by updating the API password. Regular rotation is recommended to maintain security and prevent unauthorized access. access_token valid for 1 hour refresh_token valid for 7 days All API requests must be made over HTTPS . Requests sent over plain HTTP are not supported and will fail. • [Refresh Token](https://developer.ceipal.com/ceipal-ats-v2/refresh-token.md): The authentication token is valid for 1 hour . After it expires, you must generate a new access token using the refresh token , which remains valid for 7 days . To obtain a new access token, include the expired token in the request headers as Token . • [Job Postings](https://developer.ceipal.com/ceipal-ats-v2/job-postings.md): This object represents a job within the client’s account. The following endpoints allow you to retrieve job postings using various filters. Rate limits apply to these endpoints. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. For more details, consult your CEIPAL account manager. • [Job Posting Details](https://developer.ceipal.com/ceipal-ats-v2/job-posting-details.md): Extract a single job with more details by passing the authentication token as a Bearer Token along with the job ID in the query parameters. The response will include the standard fields. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Update Job Posting](https://developer.ceipal.com/ceipal-ats-v2/update-job-posting.md): The PATCH API endpoint allows users to update existing job posting details in CEIPAL ATS by providing the encrypted jobId along with the fields to be modified. This endpoint supports partial updates, enabling changes to job information such as job title, status, billing and pay rates, start and end dates, duration, remote job preference, address, end client, number of positions, primary skills, and job description. Important Notes jobId – Must be a valid encrypted Job ID of an existing job posting. jobStatus – Accepts only the Job Status ID. Please refer to the Job Status Master Data endpoint for applicable status IDs. domain – Accepts only the domain ID. Please refer to the domains Master Data endpoint for applicable status IDs. jobStartDate – Must be provided in YYYY-MM-DD format. Example: 2026-06-18 jobEndDate – Must be provided in YYYY-MM-DD format. Example: 2027-12-30 remoteJob – Accepts numeric values only: 1 = Remote , 0 = Non-Remote . numberOfPositions – Must be a numeric value. clientBillRateSalary – Accepts numeric or float values only. payRateSalary – Accepts numeric or float values only. jobType – Type/category of the job engagement (e.g. contract, full-time). Accepts numeric ID. Please refer to the getJobTypes Master Data endpoint for applicable ID. clientBillRateCurrency – Currency ID for the client bill rate. Accepts numeric value. Please refer to the Countries Master Data endpoint for applicable currency ID. clientPayFrequencyType – Pay frequency type ID for client billing (e.g. hourly, monthly). Accepts numeric ID. Please refer to the PayFrequencyTypes Master Data endpoint for applicable ID. clientEmploymentType – Employment type ID applicable to the client bill rate. Accepts numeric ID. Please refer to the EmploymentTypes Master Data endpoint for applicable ID. minPayRate – Minimum pay rate for the position. Accepts numeric or float values only (e.g. 90000 , 90000.50 ). payRateCurrency – Currency ID for the pay rate. Accepts numeric value. Please refer to the Countries Master Data endpoint for applicable currency ID. payRatePayFrequencyType – Pay frequency type ID for the pay rate (e.g. hourly, annual). Accepts numeric ID. Please refer to the PayFrequencyTypes Master Data endpoint for applicable ID. payRateEmploymentType – Employment type ID applicable to the pay rate. Accepts numeric ID. Please refer to the EmploymentTypes Master Data endpoint for applicable ID. duration – Duration of the job engagement as free text (e.g. 6 months ). country – Country ID for the job location. Accepts numeric value. Please refer to the Countries Master Data endpoint for applicable country values. location – Array of location objects. Each object includes stateId , city , zipCode , and isPrimary ( 1 = primary , 0 = secondary) . Please refer to the States Master Data endpoint for applicable state ID values. address – Street address for the job location. Accepts string value. endClient – Name of the end client. Accepts string value. workAuthorization – Array of work authorization type IDs (e.g. [21, 22, 23] ). Please refer to the Work Authorization Master Data endpoint for applicable values. jobCategory – Job category ID. Accepts numeric value. Please refer to the JobCategories Master Data endpoint for applicable ID. taxTerms – Array of applicable tax term IDs (e.g. [6, 8, 9] ). Please refer to the EmploymentTypes Master Data endpoint for applicable ID. department – Department ID the job belongs to. Accepts numeric value. Please refer to the Department Master Data endpoint for applicable ID. industry – Array of industry IDs (e.g. [2, 3, 5] ). Please refer to the Industry Master Data endpoint for applicable values. minExperience – Minimum years of experience required. Accepts numeric value. experience – Preferred/maximum years of experience. Accepts numeric value. primarySkills – Primary skills required for the job. Comma-separated string (e.g. Java,Python,SQL ). secondarySkills – Secondary/nice-to-have skills. Comma-separated string (e.g. python,java,AWS ). jobDescription – Detailed internal job description. Accepts string value. publicJobTitle – Public-facing job title shown on career portals. Accepts string value. publicJobDescription – Public-facing job description shown on career portals. Accepts string value. postOnCareerportal – Flag to publish the job on the career portal. 1 = Post, 0 = Do not post. careerPortalPublishedDate – Date to publish on the career portal. Format: YYYY-MM-DD . customFields – Object of custom field key-value pairs for the job. To get all the custom fields created in the job posting module, call the /v2/getCustomFieldsMasterData/?moduleId=3. This endpoint returns each field's label name, data type, and options. Free text types (Text, Multi-line Text) accept any value. Date fields allows the values in the YYYY-MM-DD format. Checkbox accepts "Yes" when checked, if it is unchecked/not selected, ignore the field entirely. Do not send it as an empty value. Choice types (Dropdown, Radio Button) accepts a single option id Multi-select types (Multiple Choice, Multiple Dropdown, User) accept a single id or comma-separated ids Only the fields included in the request payload will be updated. Fields not provided will retain their existing values. • [Update Applicant](https://developer.ceipal.com/ceipal-ats-v2/update-applicant.md): The PATCH API endpoint allows users to update existing applicant details in CEIPAL ATS by providing the encrypted jobSeekerId along with the fields to be modified. This endpoint supports partial updates , enabling changes to applicant information such as personal details, contact information, location, work authorization, experience, applicant status, ownership, job title, skills, notice period, resume information, and custom fields. Important Notes jobSeekerId – Must be a valid encrypted Job Seeker ID of an existing applicant. firstName – Applicant's first name. Accepts string value. middleName – Applicant's middle name. Accepts string value. lastName – Applicant's last name. Accepts string value. nickName – Applicant's preferred/nick name. Accepts string value. homePhoneNumber – Applicant's home phone number. Accepts string value. mobileNumber – Applicant's mobile phone number. Accepts string value. workPhoneNumber – Applicant's work phone number. Accepts string value. otherPhone – Applicant's alternate phone number. Accepts string value. dateOfBirth – Applicant's date of birth. Must be provided in YYYY-MM-DD format. Example: 1999-06-15 . skypeId – Applicant's Skype ID. Accepts string value. linkedInProfileUrl – Applicant's LinkedIn profile URL. Accepts string value. facebookProfileUrl – Applicant's Facebook profile URL. Accepts string value. twitterProfileUrl – Applicant's Twitter/X profile URL. Accepts string value. videoReference – URL/reference to the applicant's video profile. Accepts string value. workAuthorization – Work authorization type ID. Accepts numeric value. Please refer to the Work Authorization Master Data endpoint for applicable values. address – Applicant's street address. Accepts string value. city – Applicant's city. Accepts string value. country – Country ID for the applicant's location. Accepts numeric value. Please refer to the Countries Master Data endpoint for applicable country values. states – State ID for the applicant's location. Accepts numeric value. Please refer to the States Master Data endpoint for applicable state ID values. zipCode – Applicant's ZIP/postal code. Accepts string value. source – Applicant source ID. Accepts numeric value. Please refer to the Sources Master Data endpoint for applicable source IDs. experience – Applicant's years of experience. Accepts numeric value. expMonths – Additional months of experience. Accepts numeric value. referredBy – Name or reference of the person who referred the applicant. Accepts string value. applicantStatus – Applicant status ID. Accepts numeric value. Please refer to the applicable Applicant Status Master Data endpoint for valid status IDs. ownership – Encrypted User ID of the user who owns the applicant record. Please refer to the Users Master Data endpoint for applicable values. jobTitle – Applicant's current or target job title. Accepts string value. relocation – Indicates whether the applicant is willing to relocate. Accepts numeric values: 1 = Yes , 0 = No . skills – Applicant's skills. Accepts a comma-separated string. Example: Python,Django,REST API . primarySkills – Applicant's primary skills. Accepts a comma-separated string. Example: Python,Django . noticePeriod – Applicant's notice period. Accepts numeric value. Please refer to the v2/getNoticePeriodList/ Master Data endpoint for applicable state ID values. currentCompany – Applicant's current company/employer. Accepts string value. gpa – Applicant's GPA/grade point average. Accepts string or numeric value. gender – Applicant's gender. Accepts only the following values: M – Male F – Female D – Decline to Self Identify O – Others raceEthnicity – Race/ethnicity ID. Accepts the applicable master data ID. Please refer to the v2/getRaceEthnicityList/ Master Data endpoint for valid values. veteranStatus – Applicant's veteran status. Accepts only the following values: 1 – Yes 2 – No 3 – Decline to Designate disability – Applicant's disability status. Accepts only the following values: 1 – Yes, I have a disability or have a history / record of having a disability 2 – No, I don't have a disability or a history / record of having a disability 3 – I don't wish to answer resumeFileName – Name of the applicant's resume file. Accepts string value. fileContent – Resume file content. Must be provided in Base64 format . customFields – Object containing custom field key-value pairs for the applicant. To retrieve all custom fields created in the applicant module, call the /v2/getCustomFieldsMasterData/?moduleId=4 endpoint. Custom Fields The customFields object supports applicant-specific custom fields. To retrieve all custom fields created in the Applicant module, call: /v2/getCustomFieldsMasterData/?moduleId=4 This endpoint returns the custom field label, data type, and available options. Text / Multi-line Text – Accepts any value. Date – Must be provided in YYYY-MM-DD format. Checkbox – Accepts "Yes" when checked. If unchecked/not selected, ignore the field entirely. Do not send it as an empty value. Dropdown / Radio Button – Accepts a single option ID . Multiple Choice / Multiple Dropdown / User – Accepts a single ID or comma-separated IDs . Partial Update Only the fields included in the request payload will be updated. Fields that are not provided will retain their existing values. • [Job Requisitions](https://developer.ceipal.com/ceipal-ats-v2/job-requisitions.md): This object represents a job requisitions within the client’s account. The following endpoints allow you to retrieve job requisitions using various filters. Rate limits apply to these endpoints. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. For more details, consult your CEIPAL account manager. • [Job Requisitions Details](https://developer.ceipal.com/ceipal-ats-v2/job-requisitions-details.md): Extract a single job requisition with more details by passing the authentication token as a Bearer Token along with the job ID in the query parameters. The response will include the standard fields. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. For more details, consult your CEIPAL account manager. • [Applicants](https://developer.ceipal.com/ceipal-ats-v2/applicants.md): This object represents an applicant in the client’s account. The following endpoints allow you to retrieve applicants using various filters. Rate limits apply to these endpoints. Use the Custom API to retrieve additional fields beyond the standard response shown here. Consult your CEIPAL account manager for more details. • [Applicant Details](https://developer.ceipal.com/ceipal-ats-v2/applicant-details.md): Extract the complete applicant details by passing the authentication token as a Bearer Token along with the applicant ID in the query parameters. The response includes the standard fields. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Submissions](https://developer.ceipal.com/ceipal-ats-v2/submissions.md): This object represents a submission in the client’s account. The following endpoints allow you to retrieve submissions using various filters. Rate limits apply to these endpoints. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Submission Details](https://developer.ceipal.com/ceipal-ats-v2/submission-details.md): Extract the complete submission details by passing the authentication token as a Bearer Token along with the submission ID in the query parameters. The response includes the standard fields. The submission details response includes the job seeker ID and job ID . To retrieve additional information, pass these values to the corresponding endpoints. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Talent Bench](https://developer.ceipal.com/ceipal-ats-v2/talent-bench.md): This object represents an applicant in the client’s account. The following endpoints allow you to retrieve applicants using various filters. Rate limits apply to these endpoints. • [Bench Details](https://developer.ceipal.com/ceipal-ats-v2/bench-details.md): Extract the complete applicant details by passing the authentication token as a Bearer Token along with the applicant ID in the query parameters. The response includes the standard fields. • [Clients](https://developer.ceipal.com/ceipal-ats-v2/clients.md): This object represents the clients in the client’s account. The following endpoints allow you to retrieve clients using various filters. Rate limits apply to these endpoints based on the API key. Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Client Details](https://developer.ceipal.com/ceipal-ats-v2/client-details.md): Extract the complete client details by passing the authentication token as a Bearer Token along with the submission ID in the query parameters. The response includes the standard fields. • [Client Notes List](https://developer.ceipal.com/ceipal-ats-v2/client-notes-list.md): This endpoint retrieves the client's notes list, including client contacts, based on the client ID, leadType, modifiedBefore and modifiedAfter provided as a parameters. • [Client Contacts](https://developer.ceipal.com/ceipal-ats-v2/client-contacts.md): This endpoint retrieves the client contact information, including limit, modifiedBefore and modifiedAfter provided as a parameters. • [Leads](https://developer.ceipal.com/ceipal-ats-v2/leads.md): This object represents the leads in the client’s account. The following endpoints allow you to retrieve clients using various filters. Rate limits apply to these endpoints. Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Leads Details](https://developer.ceipal.com/ceipal-ats-v2/leads-details.md): This endpoint retrieves the complete lead information, including lead ID provided as a parameter. • [Vendors](https://developer.ceipal.com/ceipal-ats-v2/vendors.md): This object represents the vendors in the client’s account. The following endpoints allow you to retrieve clients using various filters. Rate limits apply to these endpoints. Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Vendor Details](https://developer.ceipal.com/ceipal-ats-v2/vendor-details.md): This endpoint retrieves the complete vendor information, including vendor ID provided as a parameter. • [Interviews](https://developer.ceipal.com/ceipal-ats-v2/interviews.md): This object represents an interview in the client’s account. The following endpoints allow you to retrieve interviews using various filters. Rate limits apply to these endpoints based on the API key. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Interview Details](https://developer.ceipal.com/ceipal-ats-v2/interview-details.md): This endpoint retrieves the complete interview details based on the interview ID provided as a parameter. • [Placements](https://developer.ceipal.com/ceipal-ats-v2/placements.md): This object represents placements in the client’s account. The following endpoints allow you to retrieve placements using various filters. Rate limits apply to these endpoints. Tip: Use the Custom API to retrieve additional fields beyond the standard response shown here. Check with your CEIPAL account manager for more details. • [Placement Details](https://developer.ceipal.com/ceipal-ats-v2/placement-details.md): This endpoint retrieves the complete placement details based on the placement ID provided as a parameter. • [Users](https://developer.ceipal.com/ceipal-ats-v2/users.md): This object represents users in the client’s account. The following endpoints allow you to retrieve users using various filters. Rate limits apply to these endpoints based on the API key. • [User Details](https://developer.ceipal.com/ceipal-ats-v2/user-details.md): This endpoint retrieves the complete user details based on the user ID provided as a parameter. • [Master Data](https://developer.ceipal.com/ceipal-ats-v2/master-data.md): Data from these endpoints is used across all other endpoints, as they contain the master data . • [Job Types](https://developer.ceipal.com/ceipal-ats-v2/master-data/job-types.md): This master data endpoint provides the required information for the Job Types . • [Domains](https://developer.ceipal.com/ceipal-ats-v2/master-data/domains.md): This master data endpoint provides the required information for the Domains. • [Job Categories](https://developer.ceipal.com/ceipal-ats-v2/master-data/job-categories.md): This master data endpoint provides the required information for the Job Categories . • [Applicant Status](https://developer.ceipal.com/ceipal-ats-v2/master-data/applicant-status.md): This master data endpoint provides the required information for Applicant Profile Statuses . • [Applicant Sources](https://developer.ceipal.com/ceipal-ats-v2/master-data/applicant-sources.md): This master data endpoint provides the required information for Applicant Sources . • [Business Units](https://developer.ceipal.com/ceipal-ats-v2/master-data/business-units.md): This master data endpoint provides the required information for the Business Units . • [Countries](https://developer.ceipal.com/ceipal-ats-v2/master-data/countries.md): This master data endpoint provides the required information for the Countries List. • [Client Categories](https://developer.ceipal.com/ceipal-ats-v2/master-data/client-categories.md): This master data endpoint provides the required information for the Client Categories . • [Client Statuses](https://developer.ceipal.com/ceipal-ats-v2/master-data/client-statuses.md): This master data endpoint provides the required information for the Client Statuses . • [Clearance Types](https://developer.ceipal.com/ceipal-ats-v2/master-data/clearance-types.md): This master data endpoint provides the required information for the Clearance Types . • [Employment Types](https://developer.ceipal.com/ceipal-ats-v2/master-data/employment-types.md): This master data endpoint provides the required information for the Employment Types . • [Industries](https://developer.ceipal.com/ceipal-ats-v2/master-data/industries.md): This master data endpoint provides the required information for the Industries . • [Job Statuses](https://developer.ceipal.com/ceipal-ats-v2/master-data/job-statuses.md): This master data endpoint provides the required information for the Job Statuses list. • [Pay Frequency Types](https://developer.ceipal.com/ceipal-ats-v2/master-data/pay-frequency-types.md): This master data endpoint provides the required information for the Pay Frequency Types . • [States List](https://developer.ceipal.com/ceipal-ats-v2/master-data/states-list.md): This master data endpoint provides the required information for the States list. • [Work Authorizations](https://developer.ceipal.com/ceipal-ats-v2/master-data/work-authorizations.md): This master data endpoint provides the required information for the Work Authorizations . • [Departments](https://developer.ceipal.com/ceipal-ats-v2/master-data/departments.md): This master data endpoint provides the required information for the Work Authorizations . • [NoticePeriod](https://developer.ceipal.com/ceipal-ats-v2/master-data/noticeperiod.md): This master data endpoint provides the required information for the Work Authorizations . • [Race Ethnicity](https://developer.ceipal.com/ceipal-ats-v2/master-data/race-ethnicity.md): This master data endpoint provides the required information for the Work Authorizations . • [Overview](https://developer.ceipal.com/ceipal-ats-v2/overview.md): Webhook Events enable real-time notifications from CEIPAL ATS to external systems for configured event triggers, such as job creation, job updates, applicant creation, applicant status changes, submission creation, pipeline updates, placements, and confirmations . When a configured event is triggered, the corresponding webhook automatically sends the relevant event payload to the specified endpoint, enabling seamless integrations and eliminating the need for continuous polling. Webhook Configuration To start receiving webhook events: Navigate to: Setup → API Settings → Webhook Events Create a new webhook configuration by providing: Event Name – User-defined webhook name Module – Select module (Job Posting, Applicant, Submission/Pipeline, Placement/Confirmation) Event Type – Select event trigger Webhook URL – Endpoint to receive webhook payloads Status – Enable the webhook Webhook Key – Used for request validation Save the configuration to start receiving event notifications. Webhook Request HTTP Method POST Headers Content-Type: application/json x-webhook-key: <your-webhook-key> Payload Structure Each webhook sends a JSON payload based on the event type. Common Fields event – Event identifier timestamp – Event time (UTC) id fields – Encrypted identifiers user fields – Action performed by status fields – Previous & new status (if applicable) • [Apply Without Registration](https://developer.ceipal.com/ceipal-ats-v2/apply-job.md): The "Apply Without Registration" section allows users to submit job applications without the need to register for an account. By providing essential personal and contact information, users can apply for a job directly through this API endpoint. This feature streamlines the application process and enhances user experience by eliminating the registration barrier. Go to admin setup click on applicants> custom api configuration > Download the document for more information • [Create Applicant](https://developer.ceipal.com/ceipal-ats-v2/create-applicant.md): The Create Applicant API endpoint allows users to submit job applications without the need for account registration . By providing essential details such as personal and contact information, applicants can easily apply through this streamlined and user-friendly interface . Go to admin setup click on applicants> custom api configuration • [Supported Modules & Events](https://developer.ceipal.com/ceipal-ats-v2/supported-modules-and-events.md): Webhook events are supported across multiple CEIPAL ATS modules, enabling external systems to receive real-time notifications whenever specific event triggers occur. These events help keep integrated systems synchronized with the latest updates related to job postings, applicants, submissions, pipelines, placements, and confirmations . The following modules and event types are supported: Job Posting job_created job_updated job_status_changed Applicant applicant_created applicant_updated applicant_status_changed Submission / Pipeline submission_created pipeline_created submission_updated pipeline_updated submission_status_changed pipeline_status_changed Placement / Confirmation placement_created confirmation_created placement_updated confirmation_updated placement_status_changed confirmation_status_changed • [Job Postings](https://developer.ceipal.com/ceipal-ats-v2/job-postings-sample-payloads.md): The following sample payloads illustrate the JSON request body sent to the configured webhook endpoint for Job Posting event triggers, including job creation, updates, and status changes. Payload fields may vary depending on the configured event type. 1. Job Created { "event_type": "job_created", "timestamp": "2026-04-30 14:22:01", "job_code": "JOB-2026-0042", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_title": "Senior Software Engineer", "client": "Acme Corp", "created_by": "recruiter@example.com", "created_on": "2026-04-30 14:22:01", "location": { "city": "Austin", "state": "Texas", "country": "United States" } } 2. Job Updated { "event_type": "job_updated", "timestamp": "2026-04-30 15:10:00", "job_code": "JOB-2026-0042", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_status": "Open", "pay_rate": "$80-100 / W2 / Full-time", "updated_by": "editor@example.com", "updated_on": "2026-04-30 15:10:00" } 3. Job Status Changed { "event_type": "job_status_changed", "job_code": "JOB-2026-0042", "timestamp": "2026-04-30 15:12:00", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "previous_status": "Open", "new_status": "Filled", "changed_by": "recruiter@example.com", "changed_at": "2026-04-30 15:12:00" } • [Applicants](https://developer.ceipal.com/ceipal-ats-v2/applicants-sample-payloads.md): The following sample payloads illustrate the JSON request body sent to the configured webhook endpoint for Applicant event triggers, including applicant creation, updates, and status changes. Payload fields may vary depending on the configured event type. 1. Applicant Created { "event_type": "applicant_created", "first_name": "Jane", "last_name": "Doe", "email": "jane.doe@email.com", "phone": "555-0100", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "location": "123 Main St, Austin, Texas, United States, 78701, Central", "timestamp": "2026-04-30 16:00:00", "created_by": "recruiter@example.com", "created_at": "2026-04-30 16:00:00" } 2. Applicant Updated { "event_type": "applicant_updated", "identification_no": 2, "first_name": "Jane", "last_name": "Doe", "email": "jane.doe@email.com", "phone": "555-0199", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "location": "456 Oak Ave, Austin, Texas, United States, 78702, Central", "timestamp": "2026-04-30 16:05:00", "created_by": "recruiter@example.com", "updated_by": "recruiter@example.com", "updated_at": "2026-04-30 16:05:00" } 3. Applicant Status Changed { "event_type": "applicant_status_changed", "identification_no": 4, "first_name": "Jane", "last_name": "Doe", "email": "jane.doe@email.com", "phone": "555-0100", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "location": "123 Main St, Austin, Texas, United States, 78701", "timestamp": "2026-04-30 16:10:00", "previous_status": "New", "new_status": "Screened", "created_by": "recruiter@example.com", "status_changed_by": "recruiter@example.com", "status_changed_at": "2026-04-30 16:10:00" } • [Submissions / Pipeline](https://developer.ceipal.com/ceipal-ats-v2/submission-sample-payloads.md): The following sample payloads illustrate the JSON request body sent to the configured webhook endpoint for Submission and Pipeline event triggers, including creation, updates, and status changes. Payload fields may vary depending on the configured event type. 1. Submission Created { "event_type": "submission_created", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_name": "Jane Doe", "applicant_email": "jane@email.com", "applicant_phone_no": "555-0100", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_code": "JOB-2026-0042", "job_title": "Senior Engineer", "client": "Acme Corp", "timestamp": "2026-04-30 17:00:00", "status": "Submitted", "submission_code": "SUB-2026-00099", "submission_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "submitted_by": "recruiter@example.com", "submitted_at": "2026-04-30 17:00:00" } 2. Pipeline Created { "event_type": "pipeline_created", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_name": "Jane Doe", "applicant_email": "jane@email.com", "applicant_phone_no": "555-0100", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_code": "JOB-2026-0042", "job_title": "Senior Engineer", "client": "Acme Corp", "timestamp": "2026-04-30 17:05:00", "pipeline_code": "PIP-2026-00100", "pipeline_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "tagged_by": "recruiter@example.com", "status": "tagged" } 3. Submission Status Changed { "event_type": "submission_status_changed", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_name": "Jane Doe", "applicant_email": "jane@email.com", "applicant_phone_no": "555-0100", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_code": "JOB-2026-0042", "job_title": "Senior Engineer", "client": "Acme Corp", "timestamp": "2026-04-30 18:00:00", "previous_status": "Submitted", "new_status": "Interview Scheduled", "submission_code": "SUB-2026-00099", "submission_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "submitted_by": "recruiter@example.com", "submitted_at": "2026-04-30 18:00:00" } 4. Pipeline Status Changed { "event_type": "pipeline_status_changed", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_name": "Jane Doe", "applicant_email": "jane@email.com", "applicant_phone_no": "555-0100", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_code": "JOB-2026-0042", "job_title": "Senior Engineer", "client": "Acme Corp", "timestamp": "2026-04-30 18:05:00", "previous_status": "tagged", "new_status": "Submitted to Client", "pipeline_code": "PIP-2026-00100", "pipeline_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "tagged_by": "tagger@example.com", "tagged_on": "2026-04-30 10:00:00", "changed_by": "recruiter@example.com", "changed_at": "2026-04-30 18:05:00" } 5. Submission Updated { "event_type": "submission_updated", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_name": "Jane Doe", "applicant_email": "jane@email.com", "applicant_phone_no": "555-0100", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_code": "JOB-2026-0042", "job_title": "Senior Engineer", "client": "Acme Corp", "timestamp": "2026-04-30 19:00:00", "submission_code": "SUB-2026-00099", "submission_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "status": "Interview Scheduled", "submitted_by": "submitter@example.com", "tagged_at": "2026-04-30 12:00:00" } 6. Pipeline Updated { "event_type": "pipeline_updated", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_name": "Jane Doe", "applicant_email": "jane@email.com", "applicant_phone_no": "555-0100", "job_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "job_code": "JOB-2026-0042", "job_title": "Senior Engineer", "client": "Acme Corp", "timestamp": "2026-04-30 19:05:00", "pipeline_code": "PIP-2026-00100", "pipeline_id": "ENCRYPTED_JOB_SEEKER_APPLIED_JOB_ID", "status": "tagged", "tagged_by": "tagger@example.com", "tagged_at": "2026-04-30 10:00:00" } • [Placements / Confirmations](https://developer.ceipal.com/ceipal-ats-v2/placements-confirmations-sample-payloads.md): The following sample payloads illustrate the JSON request body sent to the configured webhook endpoint for Placement and Confirmation event triggers, including creation, updates, and status changes. Payload fields may vary depending on the configured event type. 1. Placement Created { "event_type": "placement_created", "job_code": "JOB-2026-0042", "timestamp": "2026-04-30 20:00:00", "placement_code": "PL-2026-00042", "placement_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "tentative_start_date": "2026-05-15 00:00:00", "tentative_end_date": "2026-12-31 00:00:00", "revenue_type": "Contract", "business_unit": "North America", "is_confirmation": "No", "placement_status": "Active", "placement_type": "Contract", "primary_sales_mgr": "sales.mgr@example.com", "created_by": "recruiter@example.com", "recruiter": "recruiter@example.com", "submission_code": "SUB-2026-00099", "applicant_name": "Jane Doe", "applicant_email": "jane@email.com", "applicant_phone_no": "555-0100" } 2. Confirmation Created { "event_type": "confirmation_created", "job_code": "JOB-2026-0042", "timestamp": "2026-04-30 20:10:00", "confirmation_code": "PL-2026-00042", "confirmation_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "tentative_start_date": "2026-05-15 00:00:00", "tentative_end_date": "2026-12-31 00:00:00", "revenue_type": "Contract", "business_unit": "North America", "is_confirmation": "Yes", "placement_status": "Confirmed", "placement_type": "Contract", "primary_sales_mgr": "sales.mgr@example.com", "created_by": "recruiter@example.com", "recruiter": "recruiter@example.com", "submission_code": "SUB-2026-00099", "applicant_name": "Jane Doe", "applicant_email": "jane@example.com", "applicant_phone_no": "555-0100" } 3. Placement Status Changed { "event_type": "placement_status_change", "timestamp": "2025-05-13T13:30:00Z", "placement_code": "PLC-755", "placement_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "previous_status": "Active", "new_status": "Inactive", "status_changed_at": "2025-05-26T14:28:10Z" } 4. Confirmation Status Changed { "event_type": "confirmation_status_change", "timestamp": "2025-05-13T13:30:00Z", "confirmation_code": "PLC-755", "confirmation_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "previous_status": "Active", "new_status": "Inactive", "status_changed_by": "recruiter@example.com", "status_changed_at": "2025-05-26 14:28:10" } 5. Placement Updated { "event_type": "placement_updated", "job_code": "JOB-2026-0042", "timestamp": "2026-04-30 21:00:00", "placement_code": "PL-2026-00042", "placement_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "tentative_start_date": "2026-05-15 00:00:00", "tentative_end_date": "2026-12-31 00:00:00", "revenue_type": "Contract", "business_unit": "North America", "is_confirmation": "No", "placement_status": "Active", "placement_type": "Contract", "primary_sales_mgr": "sales.mgr@example.com", "created_by": "editor@example.com", "recruiter": "recruiter@example.com", "submission_code": "SUB-2026-00099", "applicant_name": "Jane", "applicant_email": "jane@example.com", "applicant_phone_no": "555-0100" } 6. Confirmation Updated { "event_type": "confirmation_updated", "job_code": "JOB-2026-0042", "timestamp": "2026-04-30 21:05:00", "confirmation_code": "PL-2026-00042", "confirmation_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "applicant_code": "APP-2026-00001", "applicant_id": "Z3RkUkt2OXZJVld2MjFpOVRSTXoxZz09", "tentative_start_date": "2026-05-15 00:00:00", "tentative_end_date": "2026-12-31 00:00:00", "revenue_type": "Contract", "business_unit": "North America", "is_confirmation": "Yes", "placement_status": "Confirmed", "placement_type": "Contract", "primary_sales_mgr": "sales.mgr@example.com", "created_by": "editor@example.com", "recruiter": "recruiter@example.com", "submission_code": "SUB-2026-00099", "applicant_name": "Jane", "applicant_email": "jane@example.com", "applicant_phone_no": "555-0100" } • [Additional Information](https://developer.ceipal.com/ceipal-ats-v2/additional-information.md): Security Each webhook request includes a Webhook Key in the request headers. Validate this key on your server to ensure authenticity Keys can be regenerated anytime Response Requirements Your endpoint should: Return HTTP 200 OK for successful processing Respond within the configured timeout period Handle duplicate webhook deliveries safely Event History Webhook delivery history can be monitored from Setup → API Settings → Webhook Events . Best Practices Use HTTPS endpoints only Handle duplicate webhook deliveries safely, as webhook events may occasionally be retried. Log incoming webhook requests Validate webhook key before processing Notes Payload structure varies based on event type All timestamps are represented in UTC timezone. Webhook URL must not exceed 200 characters. Certain identifiers may be encrypted for security purposes.