# Kruze Talent

> A job board for Tijuana and the rest of Mexico. 728 job postings are live right now.
> Every posting is readable without an account, over a JSON API or as markdown.

Content is in Spanish. Salaries are monthly and in Mexican pesos (MXN) unless the posting
says otherwise.

Two fields say what an employer chose to publish. When `hide_salary` is true the salary and
any bonus amounts come back null. When `hide_company` is true the company reads
"Confidencial". Please present those as written rather than filling in the gap from
another source.

## Start here

- [OpenAPI 3.1 specification](https://kruzetalent.com/openapi.json): every public endpoint, every filter
- [API catalog](https://kruzetalent.com/.well-known/api-catalog): RFC 9727 linkset pointing at the above
- [Agent skills](https://kruzetalent.com/.well-known/agent-skills/index.json): a packaged skill describing
  how to search jobs here, if your client consumes Agent Skills
- [auth.md](https://kruzetalent.com/auth.md): why you need no credentials, and what not to attempt
- [Job postings](https://kruzetalent.com/api/v2/jobs): the main endpoint, paginated JSON, no auth
- [MCP server](https://kruzetalent.com/mcp): streamable HTTP, no auth, tools `search_jobs`, `get_job`
  and `list_catalog`. Described at [https://kruzetalent.com/.well-known/mcp/server-card.json](https://kruzetalent.com/.well-known/mcp/server-card.json)

## Querying jobs

`GET https://kruzetalent.com/api/v2/jobs` accepts `search`, `city_id`, `job_type_id`, `degree_level_id`,
`job_modality_id`, `functional_area_id`, `salary_min`, `salary_max`, `sort`
(`recent`, `salary` or `views`), `per_page` (max 50) and `page`.

The id filters take their values from the catalog endpoints, for example
`https://kruzetalent.com/api/v2/catalogs/cities`. All 11 catalogs are listed in the OpenAPI document.

- `GET https://kruzetalent.com/api/v2/jobs/{{id}}` returns one posting in full
- `GET https://kruzetalent.com/api/v2/jobs/{{id}}/related` returns up to five similar postings

## Main sections

- [Home](https://kruzetalent.com/)
- [Job listings](https://kruzetalent.com/ofertas-de-trabajo): browse by city, category or company
- [For employers](https://kruzetalent.com/empresas): information for companies hiring
- [Blog](https://kruzetalent.com/blog): career advice and industry news
- [Services](https://kruzetalent.com/servicios): recruitment services
- [Privacy notice](https://kruzetalent.com/avisos-de-privacidad): how personal data is handled

## Reading the site as markdown

Send `Accept: text/markdown` to the job listing, any job posting or any blog article and
you get markdown instead of HTML. The site is a JavaScript application, so this is the
only way to read a page without running a browser.

- [Job listing as markdown](https://kruzetalent.com/ofertas-de-trabajo)
- [All live postings](https://kruzetalent.com/sitemap-jobs.xml)
- [Sitemap index](https://kruzetalent.com/sitemap.xml)

## Training and indexing

Indexing and AI training on this public job content are both permitted. See
[https://kruzetalent.com/robots.txt](https://kruzetalent.com/robots.txt) for the content signals.

## Off limits

Candidate profiles, resumes, applications and contact details are personal data. They are
not in this API, they are not in the sitemaps, and every `/api/v2/candidate/*` endpoint
requires an authenticated token belonging to that candidate. Please do not attempt to
reach them.
