Job description
", "locale": "en", "locationHidden": false, "addressLine1": "123 Fake Street", "addressLine2": "Suite 543", "addressCity": "New York", "addressState": "New York", "addressStateCode": "NY", "addressCountry": "US", "addressZipcode": "10001", "latitude": "40.7481561", "longitude": "-73.9895051", "applyEmail": "test@example.com", "professionalLevel": "PROFESSIONAL", "education": "HIGH_SCHOOL", "isFullTime": true, "isTemporary": false, "isContract": false, "locationType": "ONSITE" } ' \ https://HOST/api/v1/organizations/ORGID/jobs ``` where: - **APITOKEN** is the API token - **BILLINGADDRESSID** is the billing address ID (found when getting the list of existing billing addresses) - **HOST** is either `www.idealist.org` to post jobs on the production idealist.org site, or `api-sandbox.idealist.org` to simulate posting in the sandbox - **ORGID** is the organization's ID Sample response: ``` { "job": { "id": "eec0def7e0a8452eb0d9278b7a2b41cb" }, "invoice": { "id": "c3cb8584e4a14ab1ae126d694f432a38", "url": "https://www.idealist.org/invoices/c3cb8584e4a14ab1ae126d694f432a38" } } ``` You've created a new job! 🙌 ## Authentication To authenticate all API endpoint requests, you must obtain a production API token from the Idealist support staff --Job description
", "locale": "en", "jobFunctions": ["COMMUNICATIONS", "COMMUNITY_ORGANIZING"], "locationHidden": false, "addressLine1": "123 Fake Street", "addressLine2": "Suite 543", "addressCity": "New York", "addressState": "New York", "addressStateCode": "NY", "addressCountry": "US", "addressZipcode": "10001", "latitude": "40.7481561", "longitude": "-73.9895051", "applyEmail": "test@example.com", "professionalLevel": "PROFESSIONAL", "education": "HIGH_SCHOOL", "isFullTime": true, "isTemporary": false, "isContract": false, "locationType": "REMOTE", "remoteZone": "CITY", "remoteCountry": null } ``` ##### Create Job Fields - Required `name` (string) the title of the job listing. Max length: 1000 characters. `description` (string) HTML markup. Max length: 25000 characters. `latitude` and `longitude` (decimal, positive or negative) example: latitude `40.7125465` longitude `-74.0055648` for New York City. Allows us to show the listing to users looking for jobs around that point. `addressCity` (string) is a human readable city name, like `Pittsburg`. Max length: 255 characters. `addressState` (string) is a human readable state, like `California`. Max length: 100 characters. `addressStateCode` (string) is the standard state abbreviation, like `FL`. Max length: 100 characters. `addressCountry` (string) is the two letter ISO 3166-1 alpha-2 code for the country, like `US`. One of `applyEmail`, `applyUrl` or `applyText` is required. You may provide values for 1, 2 or all 3 fields. - if provided, `applyEmail` (string) must be a valid email address. Max length: 255 characters. - if provided, `applyURL` (string) must be a valid URL. Max length: 2000 characters. - if provided, `applyText` (string) must contain valid HTML markup. Max length: 25000 characters. `professionalLevel` (string) possible values are: `NONE`, `ENTRY_LEVEL`, `PROFESSIONAL`, `MANAGERIAL`, `EXECUTIVE`, `DIRECTOR` `education` (string) possible values are: `NO_REQUIREMENT`, `HIGH_SCHOOL`, `TWO_YEAR_DEGREE`, `FOUR_YEAR_DEGREE`, `MASTERS_DEGREE`, `JD`, `MD`, `PHD`, `OTHER` `billingAddressId` (string) the billing address ID to use on the invoice. ##### Create Job Fields - Optional `jobFunctions` (array of strings) List of the job functions for this job. Maximum of 5. See [Job Functions](#job-functions) below for the API request to get the list of possible job functions. `locationHidden` (boolean) when set to `true`, only the city, state and country are shown on the site as the job's location. When set to `false`, `addressLine1` must be provided and will be shown on the site (as well as `addressLine2`, if provided). Default: `false` `addressLine1` (string) required if `locationHidden` is `false`. Max length: 255 characters. `addressLine2` (string) example: `"Floor 11"`. Max length: 255 characters. `addressZipcode` (string) zip code or postal code. Max length: 100 characters. `benefits` (string) HTML markup. Max length: 25000 characters. `salaryMinimum` (integer | float | string) minimum yearly salary in US dollars. example: `20000`, `"20000.00"`, `20000.00`. `salaryMaximum` (integer | float | string) maximum yearly salary in US dollars. example: `30000`, `"30000.00"`, `30000.00`. `salaryCurrency` (string) Three letter currency code. example: `"USD"`, `"EUR"`, `"CAD"`, `"GBP"`. `salaryPeriod` (string) The salary specified (min/max) is for the period: `"YEAR"`, `"MONTH"`, `"WEEK"`, `"DAY"`, `"HOUR"`. `salaryDetails` (string) HTML markup. Max length: 2500 characters. `languageProficiency` (string) HTML markup. Max length: 25000 characters. `locale` (string) One of `"en"` (English), `"es"` (Spanish), `"pt"` (Portuguese). The language used in the listing. `applicationDeadline` (ISO date) example: `"2017-07-15"` `startDate` (ISO date) example: `"2017-07-15"` `endDate` (ISO date) example: `"2017-07-15"`. If `startDate` is specified, must be after `startDate`. `isFullTime` (boolean) default: `false` `isTemporary` (boolean) default: `false` `isContract` (boolean) default: `false` `locationType` (string) Required. One of `"ONSITE"`, `"REMOTE"`, `"HYBRID"`. If not `"ONSITE"`, then `remoteZone` is required. If `HYBRID`, then `remoteZone` should be `CITY` or `STATE`, and will be converted to `CITY` if it's `COUNTRY` or `WORLD`. `remoteZone` (string) Where a remote job can be performed from. One of `"CITY"`, `"STATE"`, `"COUNTRY"`, or `"WORLD"` (default) if `locationType` is not `"ONSITE"`. If set to `"COUNTRY"`, then `remoteCountry` is required. If set to `"STATE", then `remoteState` is required. `remoteState`: (string) The US state for a STATE zone remote job; for a STATE zone remote job. Use the last two letters of the ISO 3166-2:US code for the state, like `"NY"`. `remoteCountry`: (string) The country for a COUNTRY zone remote job; for a STATE zone remote job, this should be set to US or will be set automatically (otherwise `null`). Use the two letter ISO 3166-1 alpha-2 code for the country, like `"US"`. `remoteOk` (boolean) This is deprecated and you should prefer to use `locationType`. Whether the job is permanently remote. ##### Create Job Fields - Available to recruiter organizations only Organizations of the type "Recruiter" can post job listings either on behalf of other organizations (i.e., jobs posted by recruiters can have any organization's name attached to them) and "anonymously" (i.e., posted jobs will not show any organization's name) On the `idealist.org` production site, these fields can only be set by organizations of type "Recruiter". On the `api-sandbox.idealist.org` sandbox, all test organizations are allowed to set these fields. Note: If you wish to change the organization type of an organization in production, contact us. Fields: `hasOrgNameOverride` (boolean) whether to post on behalf of another organization `orgNameOverride` (string) if `hasOrgNameOverride` is `true`, this is the name of the organization that the job is posted on behalf of (leave `null` to post job with no organization name, i.e. "anonymously"). Max length: 1000 characters. #### Create a job (continued) If the post is successful, the server will respond with HTTP status `201`. Sample response: ```json { "job": { "id": "eec0def7e0a8452eb0d9278b7a2b41cb" }, "invoice": { "id": "c3cb8584e4a14ab1ae126d694f432a38", "url": "https://www.idealist.org/invoices/c3cb8584e4a14ab1ae126d694f432a38" } } ``` Note: on the API sandbox, fetching the invoice URL (returned as part of the response after creating a job -- see above) will return a 404. Invoice URLs on the production site will work. On the API sandbox, the `job.id` value (returned as part of the response -- see above) can be used to fetch the job using the [Get Job](#get-job) call, just as on the production site. #### Get Job `GET /api/v1/organizations/{org_id}/jobs/{job_id}` Sample response: ```json { "job": { "id": "eec0def7e0a8452eb0d9278b7a2b41cb", "created": "2017-07-05T22:44:25.640039Z", "updated": "2017-07-05T22:44:25.640039Z", "status": ["PUBLISHED"], "name": "Job Name", "hasOrgNameOverride": false, "orgNameOverride": null, "description": "Job description
", "locale": "en", "expires": "2017-08-04T22:44:25.639246Z", "creator": null, "deleted": null, "isPublished": true, "firstPublished": "2017-07-05T22:44:25.640039Z", "locationHidden": true, "addressLine1": null, "addressLine2": "line2", "addressCity": "city", "addressState": "New York", "addressStateCode": "NY", "addressZipcode": "10001", "addressCountry": "US", "latitude": 40.748156, "longitude": -73.989505, "applyEmail": "test@example.com", "applyUrl": null, "applyText": null, "benefits": null, "salaryMinimum": null, "salaryMaximum": null, "salaryDetails": null, "professionalLevel": "PROFESSIONAL", "languageProficiency": null, "education": "HIGH_SCHOOL", "applicationDeadline": null, "startDate": null, "isFullTime": true, "isTemporary": false, "isContract": false, "locationType": "REMOTE", "remoteZone": "CITY", "remoteCountry": null, "url": { "en": "https://www.idealist.org/en/eec0def7e0a8452eb0d9278b7a2b41cb-example", "es": "https://www.idealist.org/es/eec0def7e0a8452eb0d9278b7a2b41cb-ejemplo" } } } ``` #### Edit Job `PUT /api/v1/organizations/{org_id}/jobs/{job_id}` Sample request body: ```json { "name": "Job Name", "description": "Job description
", "locale": "en", "jobFunctions": ["COMMUNICATIONS", "COMMUNITY_ORGANIZING"], "applyEmail": "test@example.com", "professionalLevel": "PROFESSIONAL", "education": "HIGH_SCHOOL", "isFullTime": true, "isTemporary": false, "isContract": false, "locationType": "ONSITE" } ``` The fields are the same as when creating a job, except that those field are not taken into account: - `locationHidden` - `addressLine1` - `addressLine2` - `addressCity` - `addressState` - `addressStateCode` - `addressCountry` - `addressZipcode` - `latitude` - `longitude` Note that you can edit jobs through the API only if the job has been published and is not archived or deleted. #### Delete Job `DELETE /api/v1/organizations/{org_id}/jobs/{job_id}` You should receive a `204 No Content` response. If you `GET` a deleted job, you will see that the `deleted` attribute is now a datetime string instead of `null`. For example: ``` { "job": { // ... "deleted": "2017-10-10T20:49:50.162464Z", // ... } } ``` #### Hide Job `POST /api/v1/organizations/{org_id}/jobs/{job_id}/hide` You can hide a published job by posting to the above URL. It's not possible to hide a job that is not currently published. #### Unhide Job `POST /api/v1/organizations/{org_id}/jobs/{job_id}/unhide` You can unhide a hidden job by posting to the above URL. It's not possible to unhide a job that is not currently hidden. If a job has been hidden but would then be unpublished for other reasons (deleted, or expired), it's no longer possible to unhide the it. ### Job Functions `GET /api/v1/job-functions?lang={en|es}` Returns all the possible job functions. You have to pass the language in the URL, otherwise a 404 will be returned. You should query this list to make sure you have the lastest list of possible job functions. Sample response: ```json { "jobFunctions": [{ "id": "ACCOUNTING_FINANCE", "text": "Accounting & Finance" }, { "id": "ADMINISTRATIVE", "text": "Administrative" }, { "id": "ADVOCACY", "text": "Advocacy" }, // ... truncated { "id": "WRITING_EDITORIAL", "text": "Writing/Editorial" }] } ``` ### Note on HTML sanitization The HTML strings are sanitized for security and styling reasons. The following tags are currently allowed: - `h1` - `h2` - `h3` - `h4` - `h5` - `h6` - `ul` - `ol` - `li` - `p` - `br` - `a` - `strong` - `em` - `u` - `b` - `s` - `span` - `div` - `sub` - `sup` ## Changelog - 2024-06-20 Add endDate. - 2024-06-20 Add salaryCurrency and salaryPeriod. Update salaryMinimum and salaryMaximum type. - 2024-01-24 Remove `remoteTemporary` and `remoteTemporaryCovid` fields and remove `REMOTE_TEMPORARY` as option from `locationType` as positions are no longer expected to be temporarily remote. - 2022-10-10 Add `locationType`. Deprecate `remoteOk` and `remoteTemporary`. - 2022-03-29 Add `locale`. - 2022-02-24 Update docs for `professionalLevel` (add `DIRECTOR`). - 2022-02-24 Update validation of "remote" fields to match changes made to production. - 2021-11-11 Update docs to note `remoteOk` and `remoteTemporaryCovid` are mutually exclusive. - 2021-11-03 Updated examples to use `remoteTemporary` instead of `remoteTemporaryCovid`. - 2021-10-08 Added `remoteZone`, `remoteCountry`, and `remoteTemporaryCovid` to api examples. - 2021-10-05 Added `remoteTemporary` in favor of `remoteTemporaryCovid` since we will support positions that are temporarily remote post-covid. - 2021-03-04 Updated to include `remoteZone`, `remoteCountry` and `remoteTemporaryCovid`. - 2019-09-26 Remove API for volunteer opportunities. - 2018-10-17 Add Note on HTML sanitization section. - 2018-06-20 Updated introduction and support email address and instructions. - 2018-06-16 Add documentation about volunteer opportunities new `addressDescription` field. - 2017-12-07 Add documentation about volunteer opportunities and hiding-unhiding listings. - 2017-10-09 Add missing documentation for deleting a job. - 2017-10-01 Add job functions and the possibility to edit and delete a job. Add max length of fields. - 2017-07-27 More information on production API launch date, more info on `orgNameOverride`. - 2017-07-20 Copy fixes and clarifications. - 2017-07-19 Initial version.