Servidor MCP

mcp

com.datronis/mcp

Qué hace este MCP

Searches live job and company data, manages resumes and applications, and retrieves or publishes moderated multilingual news content.

admin_create_news
Admin-only: publish a news article directly into any locale, any status, with no safety classifier and no English-first requirement. Requires an api_key belonging to an admin account — a valid but non-admin key is rejected. For non-admin accounts, use draft_news instead. Can also queue selected translations or every missing locale without keeping the MCP request open while translation runs.
Acceso externo
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['title', 'body', 'locale'], 'properties': {'body': {'type': 'string', 'minLength': 1, 'description': 'Article body in the format selected by content_format'}, 'title': {'type': 'string', 'minLength': 1, 'description': 'Article title, in the target locale'}, 'locale': {'type': 'string', 'description': '2-letter locale code to publish directly into (e.g. "en", "de") â\x80\x94 no English-first requirement, unlike draft_news'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why). The token must belong to an admin account â\x80\x94 a valid but non-admin key is rejected.'}, 'published': {'type': 'boolean', 'description': 'Whether the article goes live immediately. Defaults to true. No safety classifier runs either way â\x80\x94 admin judgment only.'}, 'category_id': {'type': 'integer', 'description': "Category ID; defaults to the site's default news category"}, 'content_format': {'enum': ['html', 'markdown'], 'type': 'string', 'default': 'html', 'description': 'Body format. Use "markdown" for headings, tables, lists, code blocks, links and images; use "html" for rich HTML with classes and inline CSS. Defaults to html for backward compatibility.'}, 'target_locales': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 23, 'description': 'Optional locale codes to translate in the durable background queue after creating the article. Use translate_to_all instead when every missing locale is wanted.'}, 'translate_to_all': {'type': 'boolean', 'description': 'When true, queue every missing locale after creating the article. The tool returns immediately; use admin_get_news_translation_status to follow progress.'}}, 'additionalProperties': False}
admin_edit_news
Admin-only: edit any existing news article — title, body, category, or published status — regardless of who created it or what locale it is in. Requires an api_key belonging to an admin account. Unlike resubmit_news, there is no ownership restriction and no safety classifier; omit a field to leave it unchanged.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['news_id'], 'properties': {'body': {'type': 'string', 'minLength': 1, 'description': 'New body. Omit to leave unchanged.'}, 'title': {'type': 'string', 'minLength': 1, 'description': 'New title. Omit to leave unchanged.'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why). The token must belong to an admin account â\x80\x94 a valid but non-admin key is rejected.'}, 'news_id': {'type': 'integer', 'description': 'The news_id of any existing article â\x80\x94 not limited to ones the caller created'}, 'published': {'type': 'boolean', 'description': 'Publish or unpublish the article. Omit to leave the current status unchanged.'}, 'category_id': {'type': 'integer', 'description': 'New category ID. Omit to leave unchanged.'}, 'content_format': {'enum': ['html', 'markdown'], 'type': 'string', 'default': 'html', 'description': 'Body format. Use "markdown" for headings, tables, lists, code blocks, links and images; use "html" for rich HTML with classes and inline CSS. Defaults to html for backward compatibility.'}}, 'additionalProperties': False}
admin_get_news_translation_status
Admin-only: inspect translation coverage and durable queue state for a news article. Returns existing locale rows, missing locale codes, per-locale QUEUED/PROCESSING/COMPLETED/FAILED jobs, and complete=true only when all 24 languages exist.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['news_id'], 'properties': {'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why). The token must belong to an admin account â\x80\x94 a valid but non-admin key is rejected.'}, 'news_id': {'type': 'integer', 'description': 'Any news row in the translation family.'}}, 'additionalProperties': False}
admin_translate_news
Admin-only: durably queue server-generated translations for an existing published news article. Pass target_locales for selected languages, or omit it to fill every missing locale across all 24 supported languages. Existing translations are skipped and each locale has a deterministic task, so repeating the call is safe. This call returns quickly; use admin_get_news_translation_status until complete=true.
Acceso externo Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['news_id'], 'properties': {'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why). The token must belong to an admin account â\x80\x94 a valid but non-admin key is rejected.'}, 'news_id': {'type': 'integer', 'description': 'Any published news row in the translation family.'}, 'target_locales': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 23, 'description': 'Locale codes to fill (for example ["fa","de"]). Omit to queue every locale that is still missing. Existing translations are skipped, so retries are safe.'}}, 'additionalProperties': False}
apply_to_job
Submit a job application on behalf of the authenticated user. Requires a personal access token (generate one at /app/api-keys/). A resume is mandatory: if no resume_id is given, the user's default (or most recently updated) resume is used automatically, and the call fails with a clear error if the user has no resume yet.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'format': 'uuid', 'description': 'Job ID to apply for (from search_jobs or get_job)'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why).'}, 'resume_id': {'type': 'string', 'format': 'uuid', 'description': 'Resume to attach. If omitted, your default resume (or most recently updated) is used automatically.'}, 'cover_letter': {'type': 'string', 'maxLength': 5000, 'description': 'Optional cover letter text'}}, 'additionalProperties': False}
create_resume
Create a new resume for the authenticated user by directly specifying its content — name, headline, summary, contact info, work experience, education, skills, projects, certificates. Unlike the human resume builder at /app/resume-builder/, this tool skips layout and styling entirely — Datronis applies sensible defaults, which the user can still adjust later in the builder without losing anything you wrote. Requires a personal access token.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'name': {'type': 'string', 'description': 'Full name shown on the resume header.'}, 'title': {'type': 'string', 'description': 'Internal title to identify this resume, e.g. "Backend Engineer â\x80\x94 EU". Defaults to "Untitled Resume".'}, 'locale': {'type': 'string', 'description': '2-letter locale code for this resume version, e.g. "en", "de". Defaults to "en".'}, 'skills': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'skills'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'name': {'type': 'string', 'description': 'Category label, e.g. "Programming" or "Backend".'}, 'skills': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'description': 'Skill categories. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why).'}, 'contact': {'type': 'object', 'properties': {'email': {'type': 'string'}, 'phone': {'type': 'string'}, 'github': {'type': 'string'}, 'reddit': {'type': 'string'}, 'twitter': {'type': 'string'}, 'website': {'type': 'string'}, 'linkedin': {'type': 'string'}, 'telegram': {'type': 'string'}, 'languages': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'Contact links shown in the header.', 'additionalProperties': False}, 'summary': {'type': 'string', 'description': '2-4 sentence professional summary.'}, 'headline': {'type': 'string', 'description': 'Short professional title under the name, e.g. "Senior Software Engineer".'}, 'location': {'type': 'string', 'description': 'City, Country shown in the header.'}, 'projects': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'link': {'type': 'string'}, 'name': {'type': 'string'}, 'role': {'type': 'string'}, 'tech': {'type': 'array', 'items': {'type': 'string'}}, 'remote': {'type': 'boolean'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'endDate': {'type': 'string'}, 'location': {'type': 'string'}, 'startDate': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Projects section. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'education': {'type': 'array', 'items': {'type': 'object', 'required': ['university'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'field': {'type': 'string'}, 'degree': {'type': 'string'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'current': {'type': 'boolean'}, 'endDate': {'type': 'string', 'description': 'YYYY-MM'}, 'location': {'type': 'string'}, 'startDate': {'type': 'string', 'description': 'YYYY-MM'}, 'university': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Education history. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'is_default': {'type': 'boolean', 'description': 'Make this the default resume â\x80\x94 used by apply_to_job when no resume_id is given.'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['company', 'title'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'title': {'type': 'string'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'company': {'type': 'string'}, 'current': {'type': 'boolean'}, 'endDate': {'type': 'string', 'description': 'YYYY-MM, omit/empty if current'}, 'location': {'type': 'string'}, 'startDate': {'type': 'string', 'description': 'YYYY-MM'}}, 'additionalProperties': False}, 'description': 'Work history, most recent first. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'certificates': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'date': {'type': 'string', 'description': 'YYYY-MM'}, 'name': {'type': 'string'}, 'issuer': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Certifications. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'customSections': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'items'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['title'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'title': {'type': 'string'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'subtitle': {'type': 'string'}}, 'additionalProperties': False}}, 'title': {'type': 'string', 'description': 'Section heading, e.g. "Publications" or "Volunteering".'}}, 'additionalProperties': False}, 'description': 'Extra named sections not covered above (awards, publications, volunteering, etc). If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}}, 'additionalProperties': False}
draft_news
Draft and publish a news article. Open to anyone with a Datronis account — the personal access token is for rate-limiting and audit, not permission-gating. Always drafted in English first; an automated safety classifier must return "green" (not political, not likely to be seen as controversial or divisive) before the article goes live. A "flagged" result creates the article unpublished and returns the reasons — use resubmit_news with revised content to try again; there is no way to force-publish a flagged article. Publishes English-only unless target_locales is given.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['title', 'body'], 'properties': {'body': {'type': 'string', 'minLength': 1, 'description': 'Article body in the format selected by content_format'}, 'title': {'type': 'string', 'minLength': 1, 'description': 'Article title (English)'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why). Publishing is open to anyone with an account â\x80\x94 this token exists for rate-limiting and an audit trail, not to gate who may publish.'}, 'category_id': {'type': 'integer', 'description': "Category ID; defaults to the site's default news category"}, 'content_format': {'enum': ['html', 'markdown'], 'type': 'string', 'default': 'html', 'description': 'Body format. Use "markdown" for headings, tables, lists, code blocks, links and images; use "html" for rich HTML with classes and inline CSS. Defaults to html for backward compatibility.'}, 'target_locales': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional 2-letter locale codes to also translate and publish into (e.g. ["de","ru"]). English is always published first. Omit to publish English-only â\x80\x94 broad multi-language publishing is only ever done when explicitly requested. There is no limit on how many locales may be requested here.'}, 'allow_self_translation': {'type': 'boolean', 'description': 'Reserves (does not yet grant a UI for) your permission to personally translate this article into additional locales later, beyond target_locales. Defaults to true â\x80\x94 checked by default. Only ever applies to a locale after the English original has been classified "green"; a "flagged" article carries no translation permission regardless of this flag.'}}, 'additionalProperties': False}
get_categories
List all content categories available on the platform (for filtering news, jobs, etc.).
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'locale': {'type': 'integer', 'default': 1, 'maximum': 24, 'minimum': 1, 'description': 'Language locale (1=English)'}}, 'additionalProperties': False}
get_job
Get full details of a job listing by its slug or ID, including description, requirements, company info, and application link.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Job slug (URL-friendly identifier) or job ID'}, 'api_key': {'type': 'string', 'description': 'Optional: your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Prefer sending it as an `Authorization: Bearer <token>` HTTP header instead of this argument â\x80\x94 the header never enters the conversation/tool-call log the way this argument does. When provided (either way) and valid, results are personalized (e.g. includes whether you saved a job).'}}, 'additionalProperties': False}
get_missing_news_translations
List published English news articles and which locale codes they are still missing a translation for. Pass locale to focus on one language at a time. Use this to find work for submit_news_translation — this tool only reports gaps, it never translates anything itself.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number (default: 1)'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Results per page (default: 20)'}, 'locale': {'type': 'string', 'description': 'Optional 2-letter locale code (e.g. "fi") to only return articles missing that specific translation. Omit to see every published article missing at least one locale.'}}, 'additionalProperties': False}
get_my_applications
Check the status of the authenticated user's job applications. Requires a personal access token (generate one at /app/api-keys/).
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number (default: 1)'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Results per page (default: 20)'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why).'}}, 'additionalProperties': False}
get_news
Fetch the latest news articles. Optionally filter by category, locale, or title keyword. Returns title, summary, publication date, and URL.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1}, 'title': {'type': 'string', 'description': 'Search keyword in title'}, 'locale': {'type': 'integer', 'default': 1, 'maximum': 24, 'minimum': 1, 'description': 'Language locale (1=English, 2=Persian, 3=Spanish, 4=German, ...)'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0}, 'category_id': {'type': 'integer', 'description': 'Filter by category ID'}}, 'additionalProperties': False}
get_platform_stats
Get high-level statistics about the Datronis platform: total active jobs, jobs indexed in the last 7 days, companies, countries represented, news articles, and users.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_my_resumes
List the authenticated user's saved resumes. Requires a personal access token (generate one at /app/api-keys/).
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number (default: 1)'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Results per page (default: 20)'}, 'query': {'type': 'string', 'description': 'Search keyword in resume title or headline'}, 'locale': {'type': 'string', 'description': 'Filter by resume locale'}, 'status': {'enum': ['draft', 'published', 'archived'], 'type': 'string', 'description': 'Filter by resume status'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why).'}}, 'additionalProperties': False}
resubmit_news
Revise and reclassify a news article that draft_news (or a previous resubmit_news call) rejected as "flagged". Every call is its own fully logged classification attempt against the news_id's audit trail — never a silent status flip. Publishes the revision live only if the classifier now returns "green". Only the account that originally submitted the article (via draft_news) may resubmit it — a different account's api_key is rejected, even a valid one.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['news_id', 'title', 'body'], 'properties': {'body': {'type': 'string', 'minLength': 1, 'description': 'Revised article body (English)'}, 'title': {'type': 'string', 'minLength': 1, 'description': 'Revised article title (English)'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why). Publishing is open to anyone with an account â\x80\x94 this token exists for rate-limiting and an audit trail, not to gate who may publish.'}, 'news_id': {'type': 'integer', 'description': 'The news_id returned by a previous draft_news call'}, 'content_format': {'enum': ['html', 'markdown'], 'type': 'string', 'default': 'html', 'description': 'Body format. Use "markdown" for headings, tables, lists, code blocks, links and images; use "html" for rich HTML with classes and inline CSS. Defaults to html for backward compatibility.'}, 'target_locales': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Same as draft_news â\x80\x94 only used if this revision is approved'}, 'allow_self_translation': {'type': 'boolean', 'description': "Same as draft_news. Omit to leave the article's existing setting unchanged; pass explicitly to change it."}}, 'additionalProperties': False}
search_companies
Search companies on the platform. Returns company name, industry, location, size, website, and open roles count.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number (default: 1)'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Results per page (default: 10)'}, 'query': {'type': 'string', 'description': 'Company name or industry keyword'}, 'country': {'type': 'string', 'description': 'Filter by country'}, 'industry': {'type': 'string', 'description': 'Filter by industry'}, 'is_hiring': {'type': 'boolean', 'description': 'Filter to companies actively hiring'}}, 'additionalProperties': False}
search_jobs
Search job listings by keyword, location, type, or remote policy. Returns paginated results with title, company, salary, and application URL.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'q': {'type': 'string', 'description': 'Search keyword (title or description)'}, 'city': {'type': 'string', 'description': 'Filter by city'}, 'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number (default: 1)'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Results per page (default: 10)'}, 'skills': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Required skills (e.g. ["Python", "React"])'}, 'api_key': {'type': 'string', 'description': 'Optional: your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Prefer sending it as an `Authorization: Bearer <token>` HTTP header instead of this argument â\x80\x94 the header never enters the conversation/tool-call log the way this argument does. When provided (either way) and valid, results are personalized (e.g. includes whether you saved a job).'}, 'country': {'type': 'string', 'description': 'Filter by country (e.g. "United States")'}, 'job_type': {'enum': ['FULL_TIME', 'PART_TIME', 'CONTRACT', 'INTERNSHIP', 'FREELANCE'], 'type': 'string', 'description': 'Employment type'}, 'job_level': {'enum': ['ENTRY', 'MID', 'SENIOR', 'LEAD', 'EXECUTIVE'], 'type': 'string', 'description': 'Experience level required'}, 'salary_min': {'type': 'integer', 'description': 'Minimum annual salary (USD)'}, 'remote_type': {'enum': ['REMOTE', 'HYBRID', 'ONSITE'], 'type': 'string', 'description': 'Remote work policy'}}, 'additionalProperties': False}
submit_news_translation
Publish your own translation of an already-published English article into a new locale. Unlike draft_news's target_locales (which asks Datronis's own server to translate it), the translated title/body you pass here is published as-is — you (the calling AI) do the translation. Open to anyone with an account, same as draft_news; the source article must already be live, and only one translation may exist per (article, locale) — a locale that already has a translation is rejected, use get_missing_news_translations to find real gaps first.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['news_id', 'locale', 'title', 'body'], 'properties': {'body': {'type': 'string', 'minLength': 1, 'description': 'Translated body, in the target locale â\x80\x94 HTML or plain text, same format as the source'}, 'title': {'type': 'string', 'minLength': 1, 'description': 'Translated title, in the target locale'}, 'locale': {'type': 'string', 'description': '2-letter target locale code (e.g. "fi") â\x80\x94 see get_missing_news_translations for what a given article still needs'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why). Publishing is open to anyone with an account â\x80\x94 this token exists for rate-limiting and an audit trail, not to gate who may publish.'}, 'news_id': {'type': 'integer', 'description': 'The news_id of the published English source article (from get_news or get_missing_news_translations)'}, 'content_format': {'enum': ['html', 'markdown'], 'type': 'string', 'default': 'html', 'description': 'Body format. Use "markdown" for headings, tables, lists, code blocks, links and images; use "html" for rich HTML with classes and inline CSS. Defaults to html for backward compatibility.'}}, 'additionalProperties': False}
update_resume
Update an existing resume's content and/or metadata (title, locale, status, default flag). By default this merges: fields you omit stay as they are, and any section array you DO send (experiences, education, skills, projects, certificates, customSections) replaces that one section while every other section is untouched — call list_my_resumes first if you need to see current content before adding to it (e.g. appending one job to an existing experience list). Requires a personal access token.
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['resume_id'], 'properties': {'name': {'type': 'string', 'description': 'Full name shown on the resume header.'}, 'title': {'type': 'string', 'description': 'New internal title. Omit to leave unchanged.'}, 'locale': {'type': 'string', 'description': 'New locale code. Omit to leave unchanged.'}, 'skills': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'skills'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'name': {'type': 'string', 'description': 'Category label, e.g. "Programming" or "Backend".'}, 'skills': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'description': 'Skill categories. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'status': {'enum': ['draft', 'published', 'archived'], 'type': 'string', 'description': 'New status. Omit to leave unchanged.'}, 'api_key': {'type': 'string', 'description': 'Your Datronis personal access token (starts with "dtk_"). Generate one at /app/api-keys/. Required unless sent as an `Authorization: Bearer <token>` HTTP header instead (preferred â\x80\x94 see search_jobs\' api_key description for why).'}, 'contact': {'type': 'object', 'properties': {'email': {'type': 'string'}, 'phone': {'type': 'string'}, 'github': {'type': 'string'}, 'reddit': {'type': 'string'}, 'twitter': {'type': 'string'}, 'website': {'type': 'string'}, 'linkedin': {'type': 'string'}, 'telegram': {'type': 'string'}, 'languages': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'Contact links shown in the header.', 'additionalProperties': False}, 'summary': {'type': 'string', 'description': '2-4 sentence professional summary.'}, 'headline': {'type': 'string', 'description': 'Short professional title under the name, e.g. "Senior Software Engineer".'}, 'location': {'type': 'string', 'description': 'City, Country shown in the header.'}, 'projects': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'link': {'type': 'string'}, 'name': {'type': 'string'}, 'role': {'type': 'string'}, 'tech': {'type': 'array', 'items': {'type': 'string'}}, 'remote': {'type': 'boolean'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'endDate': {'type': 'string'}, 'location': {'type': 'string'}, 'startDate': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Projects section. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'education': {'type': 'array', 'items': {'type': 'object', 'required': ['university'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'field': {'type': 'string'}, 'degree': {'type': 'string'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'current': {'type': 'boolean'}, 'endDate': {'type': 'string', 'description': 'YYYY-MM'}, 'location': {'type': 'string'}, 'startDate': {'type': 'string', 'description': 'YYYY-MM'}, 'university': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Education history. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'resume_id': {'type': 'string', 'format': 'uuid', 'description': 'The resume to update â\x80\x94 from list_my_resumes.'}, 'is_default': {'type': 'boolean', 'description': 'Make this the default resume. Omit to leave unchanged.'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['company', 'title'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'title': {'type': 'string'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'company': {'type': 'string'}, 'current': {'type': 'boolean'}, 'endDate': {'type': 'string', 'description': 'YYYY-MM, omit/empty if current'}, 'location': {'type': 'string'}, 'startDate': {'type': 'string', 'description': 'YYYY-MM'}}, 'additionalProperties': False}, 'description': 'Work history, most recent first. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'certificates': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'date': {'type': 'string', 'description': 'YYYY-MM'}, 'name': {'type': 'string'}, 'issuer': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Certifications. If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}, 'full_replace': {'type': 'boolean', 'description': 'false (default): merge â\x80\x94 fields you omit stay as they are; any section array you DO send (experiences, education, skills, projects, certificates, customSections) replaces that one section, other sections are untouched. true: the content fields you send become the ENTIRE resume â\x80\x94 any section you omit is removed. Call list_my_resumes first to see current content before adding to an existing section.'}, 'customSections': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'items'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['title'], 'properties': {'id': {'type': 'string', 'description': 'Omit to auto-generate.'}, 'title': {'type': 'string'}, 'bullets': {'type': 'array', 'items': {'type': 'string'}}, 'subtitle': {'type': 'string'}}, 'additionalProperties': False}}, 'title': {'type': 'string', 'description': 'Section heading, e.g. "Publications" or "Volunteering".'}}, 'additionalProperties': False}, 'description': 'Extra named sections not covered above (awards, publications, volunteering, etc). If provided, replaces this entire section â\x80\x94 send the complete list, not just what changed.'}}, 'additionalProperties': False}
Añadido
update_resume
17 de September de 2026 a las 12:34
Añadido
create_resume
17 de September de 2026 a las 12:34
Añadido
admin_get_news_translation_status
17 de September de 2026 a las 12:34
Añadido
admin_translate_news
17 de September de 2026 a las 12:34
Añadido
admin_edit_news
17 de September de 2026 a las 12:34
Añadido
admin_create_news
17 de September de 2026 a las 12:34
Añadido
submit_news_translation
17 de September de 2026 a las 12:34
Añadido
get_missing_news_translations
17 de September de 2026 a las 12:34
Añadido
resubmit_news
17 de September de 2026 a las 12:34
Añadido
draft_news
17 de September de 2026 a las 12:34
Añadido
get_my_applications
17 de September de 2026 a las 12:34
Añadido
list_my_resumes
17 de September de 2026 a las 12:34
Añadido
apply_to_job
17 de September de 2026 a las 12:34
Añadido
get_platform_stats
17 de September de 2026 a las 12:34
Añadido
search_companies
17 de September de 2026 a las 12:34
Añadido
get_categories
17 de September de 2026 a las 12:34
Añadido
get_news
17 de September de 2026 a las 12:34
Añadido
get_job
17 de September de 2026 a las 12:34
Añadido
search_jobs
17 de September de 2026 a las 12:34