ToolsCallRequest

Invoke one of the 46 tools. `params.name` selects the tool and fixes the shape of `params.arguments`.

AI Agent UpgradesUSDC Payments

Properties

Name Type Description
jsonrpc string
id object JSON-RPC request id. Omit it to send a notification (answered with 202).
method string
params object
View JSON Schema on GitHub

JSON Schema

a-upgradenet-com-tools-call-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/a-upgradenet-com/json-schema/a-upgradenet-com-tools-call-request-schema.json",
  "title": "ToolsCallRequest",
  "description": "Invoke one of the 46 tools. `params.name` selects the tool and fixes the shape of `params.arguments`.",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/a-upgradenet-com-openapi.json#/components/schemas/ToolsCallRequest",
  "type": "object",
  "required": [
    "jsonrpc",
    "id",
    "method",
    "params"
  ],
  "properties": {
    "jsonrpc": {
      "type": "string",
      "const": "2.0"
    },
    "id": {
      "description": "JSON-RPC request id. Omit it to send a notification (answered with 202).",
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "integer"
        }
      ]
    },
    "method": {
      "type": "string",
      "const": "tools/call"
    },
    "params": {
      "oneOf": [
        {
          "$ref": "#/$defs/AnalyticsGetPostingTimesParams"
        },
        {
          "$ref": "#/$defs/AnalyticsGetPostStatsParams"
        },
        {
          "$ref": "#/$defs/AnalyticsGetProfileStatsParams"
        },
        {
          "$ref": "#/$defs/CreatorAddParams"
        },
        {
          "$ref": "#/$defs/CreatorListParams"
        },
        {
          "$ref": "#/$defs/DraftAttachImagesParams"
        },
        {
          "$ref": "#/$defs/DraftAttachMediaParams"
        },
        {
          "$ref": "#/$defs/DraftCreateParams"
        },
        {
          "$ref": "#/$defs/DraftGetParams"
        },
        {
          "$ref": "#/$defs/DraftRefineParams"
        },
        {
          "$ref": "#/$defs/EngageDraftRepliesParams"
        },
        {
          "$ref": "#/$defs/EngageGetInboxParams"
        },
        {
          "$ref": "#/$defs/EngagePostReplyParams"
        },
        {
          "$ref": "#/$defs/EngageRefreshPostsParams"
        },
        {
          "$ref": "#/$defs/EngageSetReactionParams"
        },
        {
          "$ref": "#/$defs/InspirationGetTopicsParams"
        },
        {
          "$ref": "#/$defs/LinkedinFetchProfileParams"
        },
        {
          "$ref": "#/$defs/LinkedinSearchMentionsParams"
        },
        {
          "$ref": "#/$defs/MediaCommitUploadParams"
        },
        {
          "$ref": "#/$defs/MediaGenerateImageParams"
        },
        {
          "$ref": "#/$defs/MediaPrepareUploadParams"
        },
        {
          "$ref": "#/$defs/MediaUploadParams"
        },
        {
          "$ref": "#/$defs/MediaUploadFromUrlParams"
        },
        {
          "$ref": "#/$defs/OutboundAddProspectParams"
        },
        {
          "$ref": "#/$defs/OutboundGetFeedParams"
        },
        {
          "$ref": "#/$defs/OutboundListProspectsParams"
        },
        {
          "$ref": "#/$defs/OutboundRefreshFeedParams"
        },
        {
          "$ref": "#/$defs/OutboundRemoveProspectParams"
        },
        {
          "$ref": "#/$defs/PersonaAppendDirectiveParams"
        },
        {
          "$ref": "#/$defs/PersonaGetParams"
        },
        {
          "$ref": "#/$defs/PersonaReplaceParams"
        },
        {
          "$ref": "#/$defs/PostDeleteParams"
        },
        {
          "$ref": "#/$defs/PostListParams"
        },
        {
          "$ref": "#/$defs/PostPublishParams"
        },
        {
          "$ref": "#/$defs/PostScheduleParams"
        },
        {
          "$ref": "#/$defs/PostUpdateParams"
        },
        {
          "$ref": "#/$defs/PreferencesGetParams"
        },
        {
          "$ref": "#/$defs/PreferencesUpdateParams"
        },
        {
          "$ref": "#/$defs/ProfileListParams"
        },
        {
          "$ref": "#/$defs/ViralDismissPostParams"
        },
        {
          "$ref": "#/$defs/ViralSavePostParams"
        },
        {
          "$ref": "#/$defs/ViralSearchParams"
        },
        {
          "$ref": "#/$defs/XConnectParams"
        },
        {
          "$ref": "#/$defs/XGetStatsParams"
        },
        {
          "$ref": "#/$defs/XPublishParams"
        },
        {
          "$ref": "#/$defs/XScheduleParams"
        }
      ]
    }
  },
  "$defs": {
    "AnalyticsGetPostStatsParams": {
      "type": "object",
      "description": "Per-post analytics for the profile's LinkedIn posts: likes, comments, post type, URL, posted timestamp, and time-series metrics snapshot (impressions, members reached, reactions, saves, clicks). If the stored metrics are older than 6 hours, the call first refreshes them from LinkedIn, which can take 10-40 seconds. Supports pagination and sorting; sort_by impressions ranks top posts by lifetime impressions, with posts that have no impression count last. Each post carries funnel_stage: tofu (visibility: opinions, takes, personal updates), mofu (education: how-tos, frameworks, case studies, lessons), bofu (explicit call to action), or null if not classified yet. Pass funnel_stage to only return posts of that stage, e.g. mofu for the user's educational posts. Requires an active Pro/Team subscription. LinkedIn only: for X (Twitter) posts use `x_getStats`.",
      "x-mcp-annotations": {
        "title": "Get Post Analytics",
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "analytics_getPostStats"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "start_date": {
              "type": "string",
              "format": "date-time"
            },
            "end_date": {
              "type": "string",
              "format": "date-time"
            },
            "offset": {
              "type": "integer",
              "minimum": 0
            },
            "limit": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "sort_by": {
              "type": "string",
              "enum": [
                "created_at_linkedin",
                "likes",
                "comments",
                "impressions"
              ]
            },
            "sort_direction": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            },
            "funnel_stage": {
              "type": "string",
              "enum": [
                "tofu",
                "mofu",
                "bofu"
              ]
            }
          },
          "required": [
            "profile_id"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "AnalyticsGetPostingTimesParams": {
      "type": "object",
      "description": "Posting-time history for the profile over the last 365 days — ISO timestamps of every LinkedIn post. Use to build best-time-to-post heatmaps. Requires an active Pro/Team subscription.",
      "x-mcp-annotations": {
        "title": "Get Best Posting Times",
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "analytics_getPostingTimes"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            }
          },
          "required": [
            "profile_id"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "AnalyticsGetProfileStatsParams": {
      "type": "object",
      "description": "Fetch the profile's LinkedIn analytics dashboard — current follower count, daily follower changes, daily impressions/reactions/comments, members reached total, and daily post counts. Works for personal and company profiles. Default window is the last 730 days (personal) or 365 days (company, LinkedIn cap). Requires an active Pro/Team subscription. LinkedIn only: for X (Twitter) stats use `x_getStats`.",
      "x-mcp-annotations": {
        "title": "Get Profile Analytics",
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "analytics_getProfileStats"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "start_date": {
              "type": "string",
              "format": "date-time",
              "description": "ISO 8601 timestamp. Defaults to ~2 years ago."
            },
            "end_date": {
              "type": "string",
              "format": "date-time",
              "description": "ISO 8601 timestamp. Defaults to now."
            }
          },
          "required": [
            "profile_id"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "CreatorAddParams": {
      "type": "object",
      "description": "Add a LinkedIn creator (by profile URL) to the caller's saved creator list. Capped at 20 creators per list.",
      "x-mcp-annotations": {
        "title": "Add Creator",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "creator_add"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "creator_url": {
              "type": "string",
              "minLength": 1
            }
          },
          "required": [
            "profile_id",
            "creator_url"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "CreatorListParams": {
      "type": "object",
      "description": "List the caller's saved LinkedIn creators (the \"My Creators\" list — auto-created on first call).",
      "x-mcp-annotations": {
        "title": "List Saved Creators",
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "creator_list"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            }
          },
          "required": [
            "profile_id"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "DraftAttachImagesParams": {
      "type": "object",
      "description": "Attach one or more images to a draft by their public URL so they show in the draft editor and go out with the post. Pass the 2pr-hosted URLs surfaced in the conversation context when the user attaches an image, or a URL returned by media_upload / media_uploadFromUrl. LinkedIn allows up to 9 images per post; attaching images replaces any existing video or document on the draft (a post can carry only one media kind). `alt_texts` is optional and index-aligned to `image_urls`. Returns the updated draft with its full `image_urls` list.",
      "x-mcp-annotations": {
        "title": "Attach Images to Draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "draft_attachImages"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "draft_id": {
              "type": "string",
              "format": "uuid"
            },
            "image_urls": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri"
              },
              "minItems": 1,
              "maxItems": 9
            },
            "alt_texts": {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 500
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "required": [
            "profile_id",
            "draft_id",
            "image_urls"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "DraftAttachMediaParams": {
      "type": "object",
      "description": "Attach a single video or PDF document to a draft by its public 2pr URL so it shows in the draft editor and goes out with the post. Use draft_attachImages for images instead. A LinkedIn post can carry only one media kind, so attaching a video or document replaces any images, video, or document already on the draft. `media_type` must match the file: `video` for mp4/mov, `document` for PDF. Pass a URL returned by media_upload / media_uploadFromUrl / media_commitUpload — their `kind` tells you which `media_type` to use. `title` is optional; for a document it becomes the LinkedIn document title. Returns the updated draft.",
      "x-mcp-annotations": {
        "title": "Attach Media to Draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "draft_attachMedia"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "draft_id": {
              "type": "string",
              "format": "uuid"
            },
            "media_type": {
              "type": "string",
              "enum": [
                "video",
                "document"
              ]
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "title": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 500
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "profile_id",
            "draft_id",
            "media_type",
            "url"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "DraftCreateParams": {
      "type": "object",
      "description": "Create a new draft post from the user input text and render it as three variants of the SAME angle: `regular_body` (standard medium-form), `extended_body` (longer, more depth), and `original_body` (the raw frontier-model baseline: natural paragraphs, none of our house style layered on). The three variants are NOT different hook angles. For angle diversity (different framings of the same topic), call this tool multiple times with different `user_input_text` framings. To ground the post in a web page, article, YouTube video, LinkedIn post, or Reddit thread, pass its link as `source_url` and put the angle/instructions in `user_input_text` (e.g. \"a contrarian take on this\"); the server fetches and extracts the page and folds it into the generation. To draft FROM a file or voice note the user attached (its 2pr storage URL is given in the conversation context), pass that URL as `source_file_url`: documents (PDF/DOCX/PPTX/CSV) are read as the source and audio/video (voice notes, MP4) are transcribed, with `user_input_text` the optional instruction alongside it. There are two ways to pass an image the user attached, and picking the wrong one is the most common way to ruin a draft. Use `source_image_urls` ONLY when the post should be ABOUT what is in the picture: each image is vision-described into the generation, which makes the body explain the image and state that the post is based on a file the user shared. Use `attach_image_urls` when the picture is just the visual and the user already supplied the words (a meme caption, a screenshot they are reacting to): the image is attached to the draft but kept out of the generation, so the post does not narrate what the reader can already see. Either way the image ships on the draft, so neither needs a separate draft_attachImages call. When the user hands over FINISHED post copy (written in this conversation or another tool) and wants it kept as is, set `verbatim: true`: the text in `user_input_text` is stored unchanged as all three bodies and no generation runs, so nothing is rewritten. Provide at least one of `user_input_text`, `source_url`, `source_file_url`, or `source_image_urls`. Generation runs synchronously so the returned `url` opens an already-populated editor. Takes ~10-20s (longer with `source_url`). If generation fails the draft is still created with empty bodies and the caller can retry from the editor. For a long-form LinkedIn ARTICLE or NEWSLETTER EDITION (not a feed post), set `format: \"article\"` (optionally `length`): the draft holds one article in markdown (a `# Title` line, `##` section headings) instead of three post variants, written from `user_input_text` and optionally `source_url`; an image the user attached goes in `attach_image_urls` and becomes the article cover. It takes 1-2 minutes. LinkedIn does not let apps publish articles, so the draft editor at `url` has copy buttons that paste it into the LinkedIn article editor with formatting intact; do not try to publish or schedule an article. When the user wants a post for X, Telegram or Threads and has no draft for it yet, set `format` to \"x\", \"telegram\" or \"threads\": the post is written for that network straight from `user_input_text` (their words and any asks, such as \"translate all of it\", go in as they wrote them) and optionally `source_url`, with no LinkedIn post made first; `verbatim` and `attach_image_urls` work as usual. To add another network to a draft that already exists, use draft_openFormat instead.",
      "x-mcp-annotations": {
        "title": "Create Draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "draft_create"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "user_input_text": {
              "type": "string",
              "minLength": 1,
              "maxLength": 10000
            },
            "source_url": {
              "type": "string",
              "format": "uri",
              "description": "Optional public http(s) link to ground the post in (article, YouTube, LinkedIn post, Reddit thread). Its extracted content is folded into the generation alongside user_input_text."
            },
            "source_file_url": {
              "type": "string",
              "format": "uri"
            },
            "source_image_urls": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri"
              },
              "minItems": 1,
              "maxItems": 4,
              "description": "2pr storage URLs of attached images to draft FROM: each is vision-described into the generation and auto-attached to the new draft. Use the hosted URLs given in the conversation context for user attachments. Use this ONLY when the post should be ABOUT what is in the picture: it routes generation down the write-about-this-source path, which describes the image in the body and states that the post is based on a file the user shared. For a picture that simply ships with the post, use attach_image_urls instead."
            },
            "attach_image_urls": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri"
              },
              "minItems": 1,
              "maxItems": 9,
              "description": "2pr storage URLs of images to ATTACH to the new draft WITHOUT feeding them into generation. Use this whenever the picture is the visual and the words come from the user: a meme the user wrote the caption for, a screenshot they are reacting to, a chart they are commenting on. The body is generated from user_input_text alone, so the post does not narrate what the reader can already see."
            },
            "verbatim": {
              "type": "boolean",
              "description": "Set true when user_input_text is the finished post and must not be rewritten. The text is saved exactly as sent and no generation runs. Requires user_input_text; cannot be combined with source_url, source_file_url, or source_image_urls. attach_image_urls still works."
            },
            "format": {
              "type": "string",
              "enum": [
                "post",
                "article",
                "x",
                "telegram",
                "threads"
              ],
              "description": "Default \"post\" (LinkedIn). \"article\" writes a long-form LinkedIn article or newsletter edition instead of a feed post. \"x\", \"telegram\" or \"threads\" starts the idea as a post for that network, with no LinkedIn post."
            },
            "length": {
              "type": "string",
              "enum": [
                "short",
                "standard",
                "deep"
              ],
              "description": "Article length only: short is about 800 words, standard about 1,500 (default), deep about 2,500."
            }
          },
          "required": [
            "profile_id"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "DraftGetParams": {
      "type": "object",
      "description": "Read an existing draft by id. Returns the three variants of the same angle (`regular_body` standard, `extended_body` longer, `original_body` the raw frontier-model baseline in natural paragraphs), plus `first_comment`, any attached media (images/video/document) and the LinkedIn `poll` if the draft has one. On the chat surface the attached images are also shown to you as vision blocks alongside the result, so you can see and comment on their actual content. Use this before scheduling/publishing a draft when you need to inspect or copy its contents — or pass `draft_id` directly into post_publish/post_schedule and let them hydrate from the draft.",
      "x-mcp-annotations": {
        "title": "Get Draft",
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "draft_get"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "draft_id": {
              "type": "string",
              "format": "uuid"
            }
          },
          "required": [
            "profile_id",
            "draft_id"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "DraftRefineParams": {
      "type": "object",
      "description": "Replace a draft body WHOLESALE. Only the provided fields are written. Variants follow draft_create semantics: `regular_body` standard, `extended_body` longer, `original_body` the raw frontier-model baseline in natural paragraphs. Same angle, different treatment. Pass `variant` plus the MATCHING body field to rewrite a single variant and leave the other two untouched. WARNING: the body you send REPLACES what is stored, so any edit the user made in the editor since the draft was last read is overwritten. To attach or replace a LinkedIn poll on the draft, pass `poll` (it removes any images, video or document, since a poll cannot carry media); to drop the poll, set `remove_poll: true`. Returns the updated draft and a `url` deep link to the draft editor.",
      "x-mcp-annotations": {
        "title": "Refine Draft",
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "draft_refine"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "draft_id": {
              "type": "string",
              "format": "uuid"
            },
            "variant": {
              "type": "string",
              "enum": [
                "regular",
                "extended",
                "original"
              ]
            },
            "user_input_text": {
              "type": [
                "string",
                "null"
              ]
            },
            "regular_body": {
              "type": [
                "string",
                "null"
              ],
              "description": "To tag a person or company, paste the `mention` string from linkedin_searchMentions inline where the name should appear (`@[Name](urn:li:person:X)` or `@[Name](urn:li:organization:N)`). A mention string may end with a quoted profile URL inside the parentheses; keep it exactly as given. Never invent a URN. Tags do not work in first_comment."
            },
            "extended_body": {
              "type": [
                "string",
                "null"
              ],
              "description": "To tag a person or company, paste the `mention` string from linkedin_searchMentions inline where the name should appear (`@[Name](urn:li:person:X)` or `@[Name](urn:li:organization:N)`). A mention string may end with a quoted profile URL inside the parentheses; keep it exactly as given. Never invent a URN. Tags do not work in first_comment."
            },
            "original_body": {
              "type": [
                "string",
                "null"
              ],
              "description": "To tag a person or company, paste the `mention` string from linkedin_searchMentions inline where the name should appear (`@[Name](urn:li:person:X)` or `@[Name](urn:li:organization:N)`). A mention string may end with a quoted profile URL inside the parentheses; keep it exactly as given. Never invent a URN. Tags do not work in first_comment."
            },
            "first_comment": {
              "type": [
                "string",
                "null"
              ]
            },
            "first_comment_image_url": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri"
                },
                {
                  "type": "null"
                }
              ]
            },
            "is_copied": {
              "type": "boolean"
            },
            "is_shared": {
              "type": "boolean"
            },
            "seo_title": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "seo_description": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 400
                },
                {
                  "type": "null"
                }
              ]
            },
            "poll": {
              "type": "object",
              "properties": {
                "question": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 140
                },
                "options": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30
                  },
                  "minItems": 2,
                  "maxItems": 4
                },
                "duration": {
                  "type": "string",
                  "enum": [
                    "ONE_DAY",
                    "THREE_DAYS",
                    "SEVEN_DAYS",
                    "FOURTEEN_DAYS"
                  ]
                }
              },
              "required": [
                "question",
                "options",
                "duration"
              ],
              "additionalProperties": false,
              "description": "A LinkedIn poll to publish with the post. Send it ONLY when the user asked for a poll. It needs a question and answer options: at least two options, at most four, each a short phrase. `duration` is how long voting stays open. A poll cannot be combined with images, a video or a document, and it cannot be edited after it is published. The post text still goes out above the poll."
            },
            "remove_poll": {
              "type": "boolean",
              "description": "Set true ONLY when the user asked to remove the poll from the draft."
            }
          },
          "required": [
            "profile_id",
            "draft_id"
          ],
          "additionalProperties": false,
          "$schema": "http://json-schema.org/draft-07/schema#"
        }
      }
    },
    "EngageDraftRepliesParams": {
      "type": "object",
      "description": "Generate 5 AI reply variants for a LinkedIn comment, using the user's persona and custom engage instructions. Each reply is capped at 220 characters. Pass the comment text and (optionally) the parent post text and commenter identity for better grounding.",
      "x-mcp-annotations": {
        "title": "Draft Comment Replies",
        "readOnlyHint": true,
        "openWorldHint": true
      },
      "required": [
        "name",
        "arguments"
      ],
      "properties": {
        "name": {
          "type": "string",
          "const": "engage_draftReplies"
        },
        "arguments": {
          "type": "object",
          "properties": {
            "profile_id": {
              "type": "string",
              "format": "uuid"
            },
            "comment_text": {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            "post_text": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 10000
                },
                {
                  "type": "null"
                }
              ]
            },
            "commenter_name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "commenter_headline": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 500


# --- truncated at 32 KB (105 KB total) ---
# Full source: https://artifacts.apis.io/a-upgradenet-com/json-schema/a-upgradenet-com-tools-call-request-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/a-upgradenet-com-tools-call-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.