Search and apply to real jobs, browse companies, and read tech news via Datronis's live data.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add 1–500 flashcards to a deck in one call, or update existing ones. mode "add" (default) skips exact duplicates (same front AND back, ignoring case and spacing), so re-sending a list is safe; mode "update" overwrites the answer of cards whose front already exists, keeping their review progress. Returns created/updated/unchanged/skipped counts. Requires a personal access token with the "memo" scope.
Cards to add or update (1–500 per call).
Deck to add to — from list_memo_decks or create_memo_deck.
add (default): add only cards that are not in the deck yet — a duplicate is the same front AND back (ignoring case/spacing), so re-sending a list is safe. update: cards whose front already exists get their back (and hint/tags, when you pass them) overwritten, keeping their review progress; new fronts are added. Replacing a whole deck is intentionally not available over MCP.
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 — see search_jobs' api_key description for why).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add 1–500 flashcards to a deck in one call, or update existing ones. mode "add" (default) skips exact duplicates (same front AND back, ignoring case and spacing), so re-sending a list is safe; mode "update" overwrites the answer of cards whose front already exists, keeping their review progress. Returns created/updated/unchanged/skipped counts. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| mode | string | add (default): add only cards that are not in the deck yet — a duplicate is the same front AND back (ignoring case/spacing), so re-sending a list is safe. update: cards whose front already exists get their back (and hint/tags, when you pass them) overwritten, keeping their review progress; new fronts are added. Replacing a whole deck is intentionally not available over MCP. |
| cards* | array | Cards to add or update (1–500 per call). |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| deck_id* | string | Deck to add to — from list_memo_decks or create_memo_deck. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deck_id",
"cards"
],
"properties": {
"mode": {
"enum": [
"add",
"update"
],
"type": "string",
"description": "add (default): add only cards that are not in the deck yet — a duplicate is the same front AND back (ignoring case/spacing), so re-sending a list is safe. update: cards whose front already exists get their back (and hint/tags, when you pass them) overwritten, keeping their review progress; new fronts are added. Replacing a whole deck is intentionally not available over MCP."
},
"cards": {
"type": "array",
"items": {
"type": "object",
"required": [
"front",
"back"
],
"properties": {
"back": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "Answer side — e.g. the translation or answer. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
},
"hint": {
"type": "string",
"maxLength": 1000,
"description": "Optional clue shown before the answer is revealed. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 50
},
"maxItems": 20,
"description": "Optional tags, e.g. [\"verbs\", \"n5\"]."
},
"front": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "Prompt side — e.g. a word in the language being learned, or a question. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
}
},
"additionalProperties": false
},
"maxItems": 500,
"minItems": 1,
"description": "Cards to add or update (1–500 per call)."
},
"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 — see search_jobs' api_key description for why)."
},
"deck_id": {
"type": "string",
"format": "uuid",
"description": "Deck to add to — from list_memo_decks or create_memo_deck."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| body* | string | Article body in the format selected by content_format |
| title* | string | Article title, in the target locale |
| locale* | string | 2-letter locale code to publish directly into (e.g. "en", "de") — no English-first requirement, unlike draft_news |
| api_key | string | 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 — see search_jobs' api_key description for why). The token must belong to an admin account — a valid but non-admin key is rejected. |
| published | boolean | Whether the article goes live immediately. Defaults to true. No safety classifier runs either way — admin judgment only. |
| category_id | integer | Category ID; defaults to the site's default news category |
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.
| Argument | Type | Description |
|---|---|---|
| body | string | New body. Omit to leave unchanged. |
| title | string | New title. Omit to leave unchanged. |
| api_key | string | 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 — see search_jobs' api_key description for why). The token must belong to an admin account — a valid but non-admin key is rejected. |
| news_id* | integer | The news_id of any existing article — not limited to ones the caller created |
| published | boolean | Publish or unpublish the article. Omit to leave the current status unchanged. |
| category_id | integer | New category ID. Omit to leave unchanged. |
| content_format | string | 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. |
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.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). The token must belong to an admin account — a valid but non-admin key is rejected. |
| news_id* | integer | Any news row in the translation family. |
{
"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 — see search_jobs' api_key description for why). The token must belong to an admin account — a valid but non-admin key is rejected."
},
"news_id": {
"type": "integer",
"description": "Any news row in the translation family."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). The token must belong to an admin account — a valid but non-admin key is rejected. |
| news_id* | integer | Any published news row in the translation family. |
| target_locales | array | 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. |
{
"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 — see search_jobs' api_key description for why). The token must belong to an admin account — 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
}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.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | Job ID to apply for (from search_jobs or get_job) |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| resume_id | string | Resume to attach. If omitted, your default resume (or most recently updated) is used automatically. |
| cover_letter | string | Optional cover letter text |
{
"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 — 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 a new diagram from Mermaid source — flowcharts, sequence diagrams, mind maps, ER diagrams, Gantt charts, and anything else Mermaid supports. Requires a personal access token with the "diagram" scope.
| Argument | Type | Description |
|---|---|---|
| code* | string | Mermaid diagram source, e.g. "flowchart TD\n A --> B". |
| name* | string | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| settings | object | Global Settings overrides, e.g. {"fontFamily":"...", "fontSize":16, "edgeCurve":"basis"}. |
| theme_id | string | One of the Diagram Maker theme ids, e.g. "minimal-flat", "dark-console", "neon", "cartoon". Omit to keep the current theme. |
| is_public | boolean | Public diagrams can be read (not edited) by anyone with the link. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Mermaid diagram source, e.g. \"flowchart TD\\n A --> B\"."
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"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 — see search_jobs' api_key description for why)."
},
"settings": {
"type": "object",
"description": "Global Settings overrides, e.g. {\"fontFamily\":\"...\", \"fontSize\":16, \"edgeCurve\":\"basis\"}.",
"additionalProperties": {}
},
"theme_id": {
"type": "string",
"maxLength": 40,
"description": "One of the Diagram Maker theme ids, e.g. \"minimal-flat\", \"dark-console\", \"neon\", \"cartoon\". Omit to keep the current theme."
},
"is_public": {
"type": "boolean",
"description": "Public diagrams can be read (not edited) by anyone with the link."
}
},
"additionalProperties": false
}Create a form (as a draft). Give a plain-language description and Datronis designs the questions, or pass exact questions, or start from a template. The form is checked like any human-made form and cannot ask for passwords, card numbers, one-time codes or recovery phrases. Call publish_form to make it live. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| title | string | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| language | string | Language to write the form in, e.g. "en", "fa", "de". Default "en". |
| template | string | Start from a gallery template key, e.g. "job_application", "nps", "course_quiz", "event_rsvp". |
| questions | array | Exact questions to use instead of (or with no) description. |
| description | string | Describe the form in plain words and Datronis designs it (recommended). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"mode": {
"enum": [
"survey",
"quiz",
"poll",
"interview",
"application",
"job_application",
"rsvp",
"registration",
"order",
"feedback"
],
"type": "string"
},
"title": {
"type": "string",
"maxLength": 300
},
"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 — see search_jobs' api_key description for why)."
},
"language": {
"type": "string",
"maxLength": 16,
"description": "Language to write the form in, e.g. \"en\", \"fa\", \"de\". Default \"en\"."
},
"template": {
"type": "string",
"maxLength": 40,
"description": "Start from a gallery template key, e.g. \"job_application\", \"nps\", \"course_quiz\", \"event_rsvp\"."
},
"questions": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"title"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"rows": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 50,
"description": "Matrix rows / likert statements."
},
"type": {
"type": "string",
"description": "Question type: short_text, long_text, email, phone, url, number, single_choice, multiple_choice, dropdown, yes_no, ranking, matrix, rating, opinion_scale, nps, slider, likert, date, time, datetime, date_range, file_upload, audio, video, address, consent."
},
"title": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"points": {
"type": "number"
},
"columns": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 20,
"description": "Matrix columns."
},
"correct": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "number"
}
],
"description": "Quiz mode: correct option texts, or a number."
},
"options": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
},
"maxItems": 200,
"description": "Choices for choice/ranking types; statements for likert."
},
"required": {
"type": "boolean"
},
"description": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
},
"maxItems": 60,
"description": "Exact questions to use instead of (or with no) description."
},
"description": {
"type": "string",
"maxLength": 4000,
"description": "Describe the form in plain words and Datronis designs it (recommended)."
}
},
"additionalProperties": false
}Create a new Memo flashcard deck, optionally with its first cards (up to 200). For language learning set front_lang/back_lang (BCP-47, e.g. "es-ES" / "en-US") so the user hears correct free text-to-speech in the browser. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| icon | string | One emoji, e.g. "🇯🇵". Defaults to 📚. |
| cards | array | Optional cards to add right away (up to 200; use add_memo_cards for more). |
| color | string | Hex color, e.g. "#6366f1". |
| title* | string | Deck name, e.g. "Japanese N5 vocabulary". |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| back_lang | any | BCP-47 language of the BACK side, e.g. "en-US". Omit to auto-detect. |
| front_lang | string | BCP-47 language of the FRONT side, e.g. "ja-JP" — used for free in-browser text-to-speech. Omit to auto-detect. |
| description | string |
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.
| Argument | Type | Description |
|---|---|---|
| name | string | Full name shown on the resume header. |
| title | string | Internal title to identify this resume, e.g. "Backend Engineer — EU". Defaults to "Untitled Resume". |
| locale | string | 2-letter locale code for this resume version, e.g. "en", "de". Defaults to "en". |
| skills | array | Skill categories. If provided, replaces this entire section — send the complete list, not just what changed. |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| contact | object | Contact links shown in the header. |
| summary | string | 2-4 sentence professional summary. |
Permanently delete a diagram. Cannot be undone. Requires a personal access token with the "diagram" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| diagram_id* | string | Diagram id — from list_diagrams or create_diagram. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"diagram_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 — see search_jobs' api_key description for why)."
},
"diagram_id": {
"type": "string",
"format": "uuid",
"description": "Diagram id — from list_diagrams or create_diagram."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| body* | string | Article body in the format selected by content_format |
| title* | string | Article title (English) |
| api_key | string | 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 — see search_jobs' api_key description for why). Publishing is open to anyone with an account — this token exists for rate-limiting and an audit trail, not to gate who may publish. |
| category_id | integer | Category ID; defaults to the site's default news category |
| content_format | string | 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 |
Copy an existing diagram (including one that is public but not yours) into a new diagram you own. Requires a personal access token with the "diagram" scope.
| Argument | Type | Description |
|---|---|---|
| name | string | Name for the copy. Default: "<original name> (copy)". |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| diagram_id* | string | Diagram id — from list_diagrams or create_diagram. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"diagram_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Name for the copy. Default: \"<original name> (copy)\"."
},
"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 — see search_jobs' api_key description for why)."
},
"diagram_id": {
"type": "string",
"format": "uuid",
"description": "Diagram id — from list_diagrams or create_diagram."
}
},
"additionalProperties": false
}Export all responses as CSV text or JSON (up to 2,000 rows here; use the web app for larger exports and Excel). Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| format | string | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id"
],
"properties": {
"format": {
"enum": [
"csv",
"json"
],
"type": "string"
},
"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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
}
},
"additionalProperties": false
}Export every card of a deck (front, back, hint, tags) plus the deck's settings as JSON — for a backup, for converting the deck to another format for the user, or for copying it elsewhere. The same shape can be imported back with add_memo_cards or the web importer. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| deck_id* | string | Deck to export — from list_memo_decks. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deck_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 — see search_jobs' api_key description for why)."
},
"deck_id": {
"type": "string",
"format": "uuid",
"description": "Deck to export — from list_memo_decks."
}
},
"additionalProperties": false
}List all content categories available on the platform (for filtering news, jobs, etc.).
| Argument | Type | Description |
|---|---|---|
| locale | integer | Language locale (1=English) |
{
"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 one diagram's full Mermaid source, theme, Global Settings, and node overrides. Requires a personal access token with the "diagram" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| diagram_id* | string | Diagram id — from list_diagrams or create_diagram. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"diagram_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 — see search_jobs' api_key description for why)."
},
"diagram_id": {
"type": "string",
"format": "uuid",
"description": "Diagram id — from list_diagrams or create_diagram."
}
},
"additionalProperties": false
}Get one form: its questions (with block ids for update_form), logic, theme, settings, validation issues and public link. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
}
},
"additionalProperties": false
}AI insights on a form's responses: a summary, main themes with verbatim quotes, mood and suspicious responses. Sensitive answers are never analysed. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
}
},
"additionalProperties": false
}Get one response with answers, score, files (short-lived download links), reviews and pipeline stage. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
| response_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id",
"response_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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
},
"response_id": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Aggregated results per question (counts, averages, NPS, rankings incl. instant-runoff winners) plus views, completion rate and the drop-off funnel. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
}
},
"additionalProperties": false
}Get full details of a job listing by its slug or ID, including description, requirements, company info, and application link.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Job slug (URL-friendly identifier) or job ID |
| api_key | string | 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 — 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). |
{
"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 — 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
}The user's study activity per day (reviews, correct answers, cards added), current and longest streak, and retention %. Use it to encourage them or to say which days they studied. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days back (default 30). |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| timezone | string | The user's IANA timezone, e.g. "Europe/Berlin" or "Asia/Tokyo". Decides what "due today" and "which day" mean. Defaults to UTC — pass it whenever you know it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"type": "integer",
"maximum": 371,
"minimum": 7,
"description": "How many days back (default 30)."
},
"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 — see search_jobs' api_key description for why)."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "The user's IANA timezone, e.g. \"Europe/Berlin\" or \"Asia/Tokyo\". Decides what \"due today\" and \"which day\" mean. Defaults to UTC — pass it whenever you know it."
}
},
"additionalProperties": false
}Get one flashcard and exactly where it sits in its spaced-repetition cycle: stage, step (consecutive successful recalls), interval, ease, next due date, lapses, its position in the deck's study queue (queue_position of queue_size), and its last 10 reviews. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| card_id* | string | Card id — from list_memo_cards or get_memo_study_queue. |
| timezone | string | The user's IANA timezone, e.g. "Europe/Berlin" or "Asia/Tokyo". Decides what "due today" and "which day" mean. Defaults to UTC — pass it whenever you know it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"card_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 — see search_jobs' api_key description for why)."
},
"card_id": {
"type": "string",
"format": "uuid",
"description": "Card id — from list_memo_cards or get_memo_study_queue."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "The user's IANA timezone, e.g. \"Europe/Berlin\" or \"Asia/Tokyo\". Decides what \"due today\" and \"which day\" mean. Defaults to UTC — pass it whenever you know it."
}
},
"additionalProperties": false
}Get the cards due today (reviews first, then new cards) so you can quiz the user in chat: show the front, let them answer, reveal the back, then call review_memo_card with how well they did. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max cards (default 10). |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| deck_id | string | Limit to one deck. Omit for every deck. |
| timezone | string | The user's IANA timezone, e.g. "Europe/Berlin" or "Asia/Tokyo". Decides what "due today" and "which day" mean. Defaults to UTC — pass it whenever you know it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max cards (default 10)."
},
"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 — see search_jobs' api_key description for why)."
},
"deck_id": {
"type": "string",
"format": "uuid",
"description": "Limit to one deck. Omit for every deck."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "The user's IANA timezone, e.g. \"Europe/Berlin\" or \"Asia/Tokyo\". Decides what \"due today\" and \"which day\" mean. Defaults to UTC — pass it whenever you know it."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20) |
| locale | string | 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. |
{
"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
}Check the status of the authenticated user's job applications. Requires a personal access token (generate one at /app/api-keys/).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20) |
| api_key | string | 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 — see search_jobs' api_key description for why). |
{
"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 — see search_jobs' api_key description for why)."
}
},
"additionalProperties": false
}Fetch the latest news articles. Optionally filter by category, locale, or title keyword. Returns title, summary, publication date, and URL.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| title | string | Search keyword in title |
| locale | integer | Language locale (1=English, 2=Persian, 3=Spanish, 4=German, ...) |
| offset | integer | |
| category_id | integer | Filter by category ID |
{
"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 high-level statistics about the Datronis platform: total active jobs, jobs indexed in the last 7 days, companies, countries represented, news articles, and users.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List the authenticated user's saved diagrams (name, theme, public flag, timestamps — not the full Mermaid source; call get_diagram for that). Requires a personal access token with the "diagram" scope.
| Argument | Type | Description |
|---|---|---|
| q | string | Filter by name (case-insensitive substring). |
| limit | integer | |
| offset | integer | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Filter by name (case-insensitive substring)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"offset": {
"type": "integer",
"minimum": 0
},
"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 — see search_jobs' api_key description for why)."
}
},
"additionalProperties": false
}List submitted responses to a form (answers keyed by block id; get_form maps ids to questions). Reviewers only see responses assigned to them; blind review hides identities. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| page | integer | |
| limit | integer | |
| stage | string | |
| search | string | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
| starred | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id"
],
"properties": {
"page": {
"type": "integer",
"minimum": 1
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"stage": {
"type": "string",
"maxLength": 40
},
"search": {
"type": "string",
"maxLength": 200
},
"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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
},
"starred": {
"type": "boolean"
}
},
"additionalProperties": false
}List the user's Datronis forms (and forms shared with them) with status, mode, response counts and public links. Requires a personal access token with the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| search | string | |
| status | string | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"search": {
"type": "string",
"maxLength": 200
},
"status": {
"enum": [
"draft",
"published",
"closed",
"archived"
],
"type": "string"
},
"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 — see search_jobs' api_key description for why)."
}
},
"additionalProperties": false
}List or search flashcards. With deck_id: that deck's cards (newest first). With only a query: search across all the user's decks — use this to find "the card about X" before editing or reviewing it. Every card includes `schedule`: stage (new/learning/review/mature), step, interval_days, due_date and due_in_days. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max cards to return (default 50). |
| query | string | Text to search in front/back/hint, or an exact tag. |
| offset | integer | Skip this many cards (default 0). |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| deck_id | string | Deck to list. Omit together with a `query` to search across ALL of the user's decks. |
| timezone | string | The user's IANA timezone, e.g. "Europe/Berlin" or "Asia/Tokyo". Decides what "due today" and "which day" mean. Defaults to UTC — pass it whenever you know it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max cards to return (default 50)."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Text to search in front/back/hint, or an exact tag."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Skip this many cards (default 0)."
},
"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 — see search_jobs' api_key description for why)."
},
"deck_id": {
"type": "string",
"format": "uuid",
"description": "Deck to list. Omit together with a `query` to search across ALL of the user's decks."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "The user's IANA timezone, e.g. \"Europe/Berlin\" or \"Asia/Tokyo\". Decides what \"due today\" and \"which day\" mean. Defaults to UTC — pass it whenever you know it."
}
},
"additionalProperties": false
}List the authenticated user's Memo flashcard decks with card counts, how many cards are due today, and each deck's front/back language. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| timezone | string | The user's IANA timezone, e.g. "Europe/Berlin" or "Asia/Tokyo". Decides what "due today" and "which day" mean. Defaults to UTC — pass it whenever you know it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"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 — see search_jobs' api_key description for why)."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "The user's IANA timezone, e.g. \"Europe/Berlin\" or \"Asia/Tokyo\". Decides what \"due today\" and \"which day\" mean. Defaults to UTC — pass it whenever you know it."
}
},
"additionalProperties": false
}List the authenticated user's saved resumes. Requires a personal access token (generate one at /app/api-keys/).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 20) |
| query | string | Search keyword in resume title or headline |
| locale | string | Filter by resume locale |
| status | string | Filter by resume status |
| api_key | string | 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 — see search_jobs' api_key description for why). |
{
"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 — see search_jobs' api_key description for why)."
}
},
"additionalProperties": false
}Publish the current draft so respondents see it, returning the public link. If the change affects questions that already have answers, it is refused unless confirm_data_impact is true. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
| confirm_data_impact | boolean | Set true to publish even though the change affects questions that already have answers. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
},
"confirm_data_impact": {
"type": "boolean",
"description": "Set true to publish even though the change affects questions that already have answers."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| body* | string | Revised article body (English) |
| title* | string | Revised article title (English) |
| api_key | string | 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 — see search_jobs' api_key description for why). Publishing is open to anyone with an account — this token exists for rate-limiting and an audit trail, not to gate who may publish. |
| news_id* | integer | The news_id returned by a previous draft_news call |
| content_format | string | 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 | array | Same as draft_news — only used if this revision is approved |
Fill in or update your interview/application scorecard for a response. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| scores* | object | Scorecard item id → score (see get_form: content.modeConfig.interview.scorecard). |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| comment | string | |
| form_id* | string | Form id — from list_forms or create_form. |
| verdict | string | |
| response_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id",
"response_id",
"scores"
],
"properties": {
"scores": {
"type": "object",
"description": "Scorecard item id → score (see get_form: content.modeConfig.interview.scorecard).",
"additionalProperties": {
"type": "number"
}
},
"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 — see search_jobs' api_key description for why)."
},
"comment": {
"type": "string",
"maxLength": 10000
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
},
"verdict": {
"enum": [
"hire",
"maybe",
"no"
],
"type": "string"
},
"response_id": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Record the user's answer to a flashcard and reschedule it (SM-2 spaced repetition) — exactly the same as rating it in the web app, and it counts toward their activity calendar and streak. Also use this when the user says they already know a card ("easy" pushes it days ahead). Returns the card's new schedule. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| rating* | string | How well the USER recalled it: again = forgot, hard = recalled with real difficulty, good = recalled, easy = instant. Use "easy" when the user says they already know the card well. |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| card_id* | string | Card the user just answered. |
| timezone | string | The user's IANA timezone, e.g. "Europe/Berlin" or "Asia/Tokyo". Decides what "due today" and "which day" mean. Defaults to UTC — pass it whenever you know it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"card_id",
"rating"
],
"properties": {
"rating": {
"enum": [
"again",
"hard",
"good",
"easy"
],
"type": "string",
"description": "How well the USER recalled it: again = forgot, hard = recalled with real difficulty, good = recalled, easy = instant. Use \"easy\" when the user says they already know the card well."
},
"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 — see search_jobs' api_key description for why)."
},
"card_id": {
"type": "string",
"format": "uuid",
"description": "Card the user just answered."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "The user's IANA timezone, e.g. \"Europe/Berlin\" or \"Asia/Tokyo\". Decides what \"due today\" and \"which day\" mean. Defaults to UTC — pass it whenever you know it."
}
},
"additionalProperties": false
}Search companies on the platform. Returns company name, industry, location, size, website, and open roles count.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 10) |
| query | string | Company name or industry keyword |
| country | string | Filter by country |
| industry | string | Filter by industry |
| is_hiring | boolean | Filter to companies actively hiring |
{
"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 job listings by keyword, location, type, or remote policy. Returns paginated results with title, company, salary, and application URL.
| Argument | Type | Description |
|---|---|---|
| q | string | Search keyword (title or description) |
| city | string | Filter by city |
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (default: 10) |
| skills | array | Required skills (e.g. ["Python", "React"]) |
| api_key | string | 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 — 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 | string | Filter by country (e.g. "United States") |
| job_type | string | Employment type |
| job_level | string | Experience level required |
Close a published form (stop accepting responses) or reopen it. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| status* | string | closed = stop accepting responses; published = reopen. |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id",
"status"
],
"properties": {
"status": {
"enum": [
"closed",
"published"
],
"type": "string",
"description": "closed = stop accepting responses; published = reopen."
},
"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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| body* | string | Translated body, in the target locale — HTML or plain text, same format as the source |
| title* | string | Translated title, in the target locale |
| locale* | string | 2-letter target locale code (e.g. "fi") — see get_missing_news_translations for what a given article still needs |
| api_key | string | 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 — see search_jobs' api_key description for why). Publishing is open to anyone with an account — this token exists for rate-limiting and an audit trail, not to gate who may publish. |
| news_id* | integer | The news_id of the published English source article (from get_news or get_missing_news_translations) |
Update a diagram: rename it, replace its Mermaid source entirely, change its theme or Global Settings, or set its node overrides. Only fields you pass change — to edit the diagram's content, pass the complete new `code`, not a fragment. Requires a personal access token with the "diagram" scope.
| Argument | Type | Description |
|---|---|---|
| code | string | Full replacement Mermaid source — this tool rewrites the whole diagram, not a patch to one node. |
| name | string | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| settings | object | |
| theme_id | string | One of the Diagram Maker theme ids, e.g. "minimal-flat", "dark-console", "neon", "cartoon". Omit to keep the current theme. |
| is_public | boolean | |
| diagram_id* | string | Diagram id — from list_diagrams or create_diagram. |
| node_overrides | object | Per-node drag position/color overrides, keyed by node id — as the editor itself stores them. |
Edit a form's draft with a list of operations (add/update/remove/move questions, set title/theme/layout). All-or-nothing; returns the updated form and validation issues. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
| operations* | array | Applied in order, all-or-nothing. Each item is one of: {"op":"add_question","question":{...same shape as create_form questions},"after":"<blockId>|null"}, {"op":"update_question","blockId","title?","description?","required?","options?":[...]}, {"op":"remove_question","blockId","force?"}, {"op":"move_question","blockId","after":"<blockId>|null"}, {"op":"set","title?","description?","theme?":"minimal|paper|midnight|pastel|brutalist|glass|editorial|terminal|neon|nature|corporate|playful|monochrome|sunset|ocean|academic|luxury|default","layout?":"classic|one_at_a_time|conversation"}. Changes go to the draft; call publish_form to make them live. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id",
"operations"
],
"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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
},
"operations": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"maxItems": 100,
"minItems": 1,
"description": "Applied in order, all-or-nothing. Each item is one of: {\"op\":\"add_question\",\"question\":{...same shape as create_form questions},\"after\":\"<blockId>|null\"}, {\"op\":\"update_question\",\"blockId\",\"title?\",\"description?\",\"required?\",\"options?\":[...]}, {\"op\":\"remove_question\",\"blockId\",\"force?\"}, {\"op\":\"move_question\",\"blockId\",\"after\":\"<blockId>|null\"}, {\"op\":\"set\",\"title?\",\"description?\",\"theme?\":\"minimal|paper|midnight|pastel|brutalist|glass|editorial|terminal|neon|nature|corporate|playful|monochrome|sunset|ocean|academic|luxury|default\",\"layout?\":\"classic|one_at_a_time|conversation\"}. Changes go to the draft; call publish_form to make them live."
}
},
"additionalProperties": false
}Manage a response: move it to a pipeline stage (moves its Kanban card too), tag, star or add private notes. Requires the "forms" scope.
| Argument | Type | Description |
|---|---|---|
| tags | array | |
| notes | string | |
| stage | string | Pipeline stage, e.g. New, Screening, Interview, Offer, Hired, Rejected. |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| form_id* | string | Form id — from list_forms or create_form. |
| starred | boolean | |
| response_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id",
"response_id"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 30
},
"notes": {
"type": "string",
"maxLength": 20000
},
"stage": {
"type": "string",
"maxLength": 40,
"description": "Pipeline stage, e.g. New, Screening, Interview, Offer, Hired, Rejected."
},
"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 — see search_jobs' api_key description for why)."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form id — from list_forms or create_form."
},
"starred": {
"type": "boolean"
},
"response_id": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Edit a flashcard's front, back, hint or tags. Only fields you pass change; the card keeps its review schedule. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| back | string | Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side). |
| hint | string | Empty string removes the hint. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side). |
| tags | array | Replaces the whole tag list. |
| front | string | Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side). |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| card_id* | string | Card to edit. |
Rename or restyle a Memo deck, or change its front/back language. Only fields you pass change. Requires a personal access token with the "memo" scope.
| Argument | Type | Description |
|---|---|---|
| icon | string | |
| color | string | |
| title | string | |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| deck_id* | string | Deck to update — from list_memo_decks. |
| back_lang | any | BCP-47 language of the back side. Empty string clears it. |
| front_lang | string | BCP-47 language of the front side. Empty string clears it. |
| description | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deck_id"
],
"properties": {
"icon": {
"type": "string",
"maxLength": 10
},
"color": {
"type": "string",
"maxLength": 20
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"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 — see search_jobs' api_key description for why)."
},
"deck_id": {
"type": "string",
"format": "uuid",
"description": "Deck to update — from list_memo_decks."
},
"back_lang": {
"$ref": "#/properties/front_lang",
"description": "BCP-47 language of the back side. Empty string clears it."
},
"front_lang": {
"type": "string",
"pattern": "^(|[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8}){0,3})$",
"maxLength": 16,
"description": "BCP-47 language of the front side. Empty string clears it."
},
"description": {
"type": "string",
"maxLength": 1000
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| name | string | Full name shown on the resume header. |
| title | string | New internal title. Omit to leave unchanged. |
| locale | string | New locale code. Omit to leave unchanged. |
| skills | array | Skill categories. If provided, replaces this entire section — send the complete list, not just what changed. |
| status | string | New status. Omit to leave unchanged. |
| api_key | string | 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 — see search_jobs' api_key description for why). |
| contact | object | Contact links shown in the header. |
| summary |
| content_format |
| string |
| 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 | array | 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 | boolean | When true, queue every missing locale after creating the article. The tool returns immediately; use admin_get_news_translation_status to follow progress. |
{
"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\") — 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 — see search_jobs' api_key description for why). The token must belong to an admin account — 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 — 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
}{
"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 — see search_jobs' api_key description for why). The token must belong to an admin account — a valid but non-admin key is rejected."
},
"news_id": {
"type": "integer",
"description": "The news_id of any existing article — 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
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title"
],
"properties": {
"icon": {
"type": "string",
"maxLength": 10,
"description": "One emoji, e.g. \"🇯🇵\". Defaults to 📚."
},
"cards": {
"type": "array",
"items": {
"type": "object",
"required": [
"front",
"back"
],
"properties": {
"back": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "Answer side — e.g. the translation or answer. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
},
"hint": {
"type": "string",
"maxLength": 1000,
"description": "Optional clue shown before the answer is revealed. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 50
},
"maxItems": 20,
"description": "Optional tags, e.g. [\"verbs\", \"n5\"]."
},
"front": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "Prompt side — e.g. a word in the language being learned, or a question. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
}
},
"additionalProperties": false
},
"maxItems": 200,
"description": "Optional cards to add right away (up to 200; use add_memo_cards for more)."
},
"color": {
"type": "string",
"maxLength": 20,
"description": "Hex color, e.g. \"#6366f1\"."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Deck name, e.g. \"Japanese N5 vocabulary\"."
},
"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 — see search_jobs' api_key description for why)."
},
"back_lang": {
"$ref": "#/properties/front_lang",
"description": "BCP-47 language of the BACK side, e.g. \"en-US\". Omit to auto-detect."
},
"front_lang": {
"type": "string",
"pattern": "^(|[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8}){0,3})$",
"maxLength": 16,
"description": "BCP-47 language of the FRONT side, e.g. \"ja-JP\" — used for free in-browser text-to-speech. Omit to auto-detect."
},
"description": {
"type": "string",
"maxLength": 1000
}
},
"additionalProperties": false
}| headline |
| string |
| Short professional title under the name, e.g. "Senior Software Engineer". |
| location | string | City, Country shown in the header. |
| projects | array | Projects section. If provided, replaces this entire section — send the complete list, not just what changed. |
| education | array | Education history. If provided, replaces this entire section — send the complete list, not just what changed. |
| is_default | boolean | Make this the default resume — used by apply_to_job when no resume_id is given. |
| experiences | array | Work history, most recent first. If provided, replaces this entire section — send the complete list, not just what changed. |
| certificates | array | Certifications. If provided, replaces this entire section — send the complete list, not just what changed. |
| customSections | array | Extra named sections not covered above (awards, publications, volunteering, etc). If provided, replaces this entire section — send the complete list, not just what changed. |
{
"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 — 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 — 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 — 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 — 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 — send the complete list, not just what changed."
},
"is_default": {
"type": "boolean",
"description": "Make this the default resume — 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 — 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 — 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 — send the complete list, not just what changed."
}
},
"additionalProperties": false
}| array |
| 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 — 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 | boolean | 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 — 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. |
{
"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 — see search_jobs' api_key description for why). Publishing is open to anyone with an account — 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 — 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 — 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
}| allow_self_translation | boolean | Same as draft_news. Omit to leave the article's existing setting unchanged; pass explicitly to change it. |
{
"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 — see search_jobs' api_key description for why). Publishing is open to anyone with an account — 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 — 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
}| salary_min | integer | Minimum annual salary (USD) |
| remote_type | string | Remote work policy |
{
"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 — 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
}| content_format |
| string |
| 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. |
{
"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 — 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\") — 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 — see search_jobs' api_key description for why). Publishing is open to anyone with an account — 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
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"diagram_id"
],
"properties": {
"code": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Full replacement Mermaid source — this tool rewrites the whole diagram, not a patch to one node."
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"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 — see search_jobs' api_key description for why)."
},
"settings": {
"type": "object",
"additionalProperties": {}
},
"theme_id": {
"type": "string",
"maxLength": 40,
"description": "One of the Diagram Maker theme ids, e.g. \"minimal-flat\", \"dark-console\", \"neon\", \"cartoon\". Omit to keep the current theme."
},
"is_public": {
"type": "boolean"
},
"diagram_id": {
"type": "string",
"format": "uuid",
"description": "Diagram id — from list_diagrams or create_diagram."
},
"node_overrides": {
"type": "object",
"description": "Per-node drag position/color overrides, keyed by node id — as the editor itself stores them.",
"additionalProperties": {}
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"card_id"
],
"properties": {
"back": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
},
"hint": {
"type": "string",
"maxLength": 1000,
"description": "Empty string removes the hint. Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 50
},
"maxItems": 20,
"description": "Replaces the whole tag list."
},
"front": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "Markdown is rendered on both the web app and the study flashcard: **bold**, _italic_, ~~strike~~, `code`, bullet/numbered lists, > quotes, and [links](url). A single newline renders as a line break (no need for a blank line between lines of the same side)."
},
"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 — see search_jobs' api_key description for why)."
},
"card_id": {
"type": "string",
"format": "uuid",
"description": "Card to edit."
}
},
"additionalProperties": false
}| string |
| 2-4 sentence professional summary. |
| headline | string | Short professional title under the name, e.g. "Senior Software Engineer". |
| location | string | City, Country shown in the header. |
| projects | array | Projects section. If provided, replaces this entire section — send the complete list, not just what changed. |
| education | array | Education history. If provided, replaces this entire section — send the complete list, not just what changed. |
| resume_id* | string | The resume to update — from list_my_resumes. |
| is_default | boolean | Make this the default resume. Omit to leave unchanged. |
| experiences | array | Work history, most recent first. If provided, replaces this entire section — send the complete list, not just what changed. |
| certificates | array | Certifications. If provided, replaces this entire section — send the complete list, not just what changed. |
| full_replace | boolean | false (default): merge — 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 — any section you omit is removed. Call list_my_resumes first to see current content before adding to an existing section. |
| customSections | array | Extra named sections not covered above (awards, publications, volunteering, etc). If provided, replaces this entire section — send the complete list, not just what changed. |
{
"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 — 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 — 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 — 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 — send the complete list, not just what changed."
},
"resume_id": {
"type": "string",
"format": "uuid",
"description": "The resume to update — 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 — 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 — send the complete list, not just what changed."
},
"full_replace": {
"type": "boolean",
"description": "false (default): merge — 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 — 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 — send the complete list, not just what changed."
}
},
"additionalProperties": false
}