Paperform MCP by usefulapi

Read Paperform forms, submissions, products and coupons, Papersign documents, and manage coupons.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
98%
命名质量
74%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(7)

  • LOWTool 'paperform_list_partial_submissions' name length outside 3-30 range在 paperform_list_partial_submissions 中
  • LOWTool 'paperform_get_partial_submission' name length outside 3-30 range在 paperform_get_partial_submission 中
  • LOWTool 'paperform_list_papersign_documents' name length outside 3-30 range在 paperform_list_papersign_documents 中
  • LOWTool 'paperform_get_papersign_document' name length outside 3-30 range在 paperform_get_papersign_document 中
  • LOWTool 'paperform_get_signed_document_url' name length outside 3-30 range在 paperform_get_signed_document_url 中
  • LOWTool 'paperform_list_papersign_folders' name length outside 3-30 range在 paperform_list_papersign_folders 中
  • LOWTool 'paperform_list_papersign_spaces' name length outside 3-30 range在 paperform_list_papersign_spaces 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~5,767token 数(工具定义)
~1.9 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 4.51%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "paperform": {
      "url": "https://paperform.usefulapi.io/mcp"
    }
  }
}

远程端点

https://paperform.usefulapi.io/mcpstreamable-http

它能做什么

工具清单

工具(23)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢paperform_list_forms(search, search_fields, limit, skip, after_id, ...)

List the forms in the Paperform account (id, slug, custom_slug, title, url, live, tags, submission_count, space_id, dates), newest first. Search by title, or also by slug/custom_slug with search_fields. Start here to find the slug or id the other tools need. Paperform: GET /forms.

输入模式

{
  "type": "object",
  "properties": {
    "search": {
      "description": "Text to match (partial, case-insensitive) — the form title unless search_fields says otherwise.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "search_fields": {
      "description": "Which fields `search` matches: any of title, slug, custom_slug (default title only).",
      "minItems": 1,
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "title",
          "slug",
          "custom_slug"
        ]
      }
    },
    "limit": {
      "description": "Results per page, 1-100 (Paperform default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "skip": {
      "description": "Results to skip (offset). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "after_id": {
      "description": "Cursor: only results after this id (e.g. the previous reply's last_id).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "before_id": {
      "description": "Cursor: only results before this id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_date": {
      "description": "Only results created after this ISO 8601 date-time (UTC). Ignored by Paperform when after_id is set.",
      "type": "string"
    },
    "before_date": {
      "description": "Only results created before this ISO 8601 date-time (UTC). Ignored by Paperform when before_id is set.",
      "type": "string"
    },
    "sort": {
      "description": "Sort by created_at: DESC (default, newest first) or ASC.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_get_form(form)

Fetch one form by slug, custom slug or id: title, description, url, live flag, tags, submission_count, space and dates. Paperform: GET /forms/{slug_or_id}.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    }
  },
  "required": [
    "form"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_form_fields(form, search)

List a form's questions (key, title, type, required, custom_key, description, options). The field keys are the keys of a submission's `data` object, so read this to interpret answers. Paperform: GET /forms/{slug_or_id}/fields.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "search": {
      "description": "Only fields whose name matches this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "form"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_submissions(form, limit, skip, after_id, before_id, ...)

List one page of a form's completed submissions, newest first: answers (`data`, keyed by field key — see paperform_list_form_fields), device and UTM info, payment `charge`, generated PDFs and created_at. Page with skip/next_skip or after_id/last_id; filter by date. Paperform: GET /forms/{slug_or_id}/submissions.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "limit": {
      "description": "Results per page, 1-100 (Paperform default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "skip": {
      "description": "Results to skip (offset). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "after_id": {
      "description": "Cursor: only results after this id (e.g. the previous reply's last_id).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "before_id": {
      "description": "Cursor: only results before this id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_date": {
      "description": "Only results created after this ISO 8601 date-time (UTC). Ignored by Paperform when after_id is set.",
      "type": "string"
    },
    "before_date": {
      "description": "Only results created before this ISO 8601 date-time (UTC). Ignored by Paperform when before_id is set.",
      "type": "string"
    },
    "sort": {
      "description": "Sort by created_at: DESC (default, newest first) or ASC.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "required": [
    "form"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_get_submission(submission_id)

Fetch one submission by id, with every answer, device info, payment charge and PDFs. Paperform: GET /submissions/{id}.

输入模式

{
  "type": "object",
  "properties": {
    "submission_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The submission id (from paperform_list_submissions)."
    }
  },
  "required": [
    "submission_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_partial_submissions(form, limit, skip, after_id, before_id, ...)

List one page of a form's partial submissions (someone started the form), newest first: answers so far, last_answered field, dates. Partials that were later completed stay in the list with submitted_at set; only those with submitted_at null are abandoned. Useful for drop-off analysis and follow-ups. Paperform: GET /forms/{slug_or_id}/partial-submissions.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "limit": {
      "description": "Results per page, 1-100 (Paperform default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "skip": {
      "description": "Results to skip (offset). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "after_id": {
      "description": "Cursor: only results after this id (e.g. the previous reply's last_id).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "before_id": {
      "description": "Cursor: only results before this id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_date": {
      "description": "Only results created after this ISO 8601 date-time (UTC). Ignored by Paperform when after_id is set.",
      "type": "string"
    },
    "before_date": {
      "description": "Only results created before this ISO 8601 date-time (UTC). Ignored by Paperform when before_id is set.",
      "type": "string"
    },
    "sort": {
      "description": "Sort by created_at: DESC (default, newest first) or ASC.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "required": [
    "form"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_get_partial_submission(partial_submission_id)

Fetch one partial submission by id, with the answers given so far. It may have been completed since (submitted_at set); submitted_at null means abandoned. Paperform: GET /partial-submissions/{id}.

输入模式

{
  "type": "object",
  "properties": {
    "partial_submission_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The partial submission id (from paperform_list_partial_submissions)."
    }
  },
  "required": [
    "partial_submission_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_products(form, search)

List the products sold on a form (SKU, name, price, quantity in stock, sold, minimum/maximum, discountable, images). Paperform: GET /forms/{slug_or_id}/products.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "search": {
      "description": "Only products whose name matches this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "form"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_get_product(form, sku)

Fetch one product on a form by SKU: price, quantity in stock, sold count, limits. Paperform: GET /forms/{slug_or_id}/products/{sku}.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "sku": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The product SKU (from paperform_list_products)."
    }
  },
  "required": [
    "form",
    "sku"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_coupons(form)

List a form's coupon codes (code, enabled, target, discountAmount or discountPercentage, expiresAt). Paperform: GET /forms/{slug_or_id}/coupons.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    }
  },
  "required": [
    "form"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_get_coupon(form, code)

Fetch one coupon on a form by code. Paperform: GET /forms/{slug_or_id}/coupons/{code}.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "code": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The coupon code, e.g. DISCOUNT1."
    }
  },
  "required": [
    "form",
    "code"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_webhooks(form, limit, skip, after_id, before_id, ...)

List the webhooks on a form (id, target_url, triggers: submission / partial_submission, dates). Needs the Business API. Paperform: GET /forms/{slug_or_id}/webhooks.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "limit": {
      "description": "Results per page, 1-100 (Paperform default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "skip": {
      "description": "Results to skip (offset). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "after_id": {
      "description": "Cursor: only results after this id (e.g. the previous reply's last_id).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "before_id": {
      "description": "Cursor: only results before this id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_date": {
      "description": "Only results created after this ISO 8601 date-time (UTC). Ignored by Paperform when after_id is set.",
      "type": "string"
    },
    "before_date": {
      "description": "Only results created before this ISO 8601 date-time (UTC). Ignored by Paperform when before_id is set.",
      "type": "string"
    },
    "sort": {
      "description": "Sort by created_at: DESC (default, newest first) or ASC.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "required": [
    "form"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_spaces(search, limit, skip, after_id, before_id, ...)

List the account's spaces (folders that group forms): id, name, dates. Needs the Business API. Paperform: GET /spaces.

输入模式

{
  "type": "object",
  "properties": {
    "search": {
      "description": "Only spaces whose name matches this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "limit": {
      "description": "Results per page, 1-100 (Paperform default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "skip": {
      "description": "Results to skip (offset). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "after_id": {
      "description": "Cursor: only results after this id (e.g. the previous reply's last_id).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "before_id": {
      "description": "Cursor: only results before this id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_date": {
      "description": "Only results created after this ISO 8601 date-time (UTC). Ignored by Paperform when after_id is set.",
      "type": "string"
    },
    "before_date": {
      "description": "Only results created before this ISO 8601 date-time (UTC). Ignored by Paperform when before_id is set.",
      "type": "string"
    },
    "sort": {
      "description": "Sort by created_at: DESC (default, newest first) or ASC.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_space_forms(space_id)

List the forms in one space. Needs the Business API. Paperform: GET /spaces/{id}/forms.

输入模式

{
  "type": "object",
  "properties": {
    "space_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The space id (from paperform_list_spaces, or a form's space_id)."
    }
  },
  "required": [
    "space_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_papersign_documents(search, status, folder_id, space_id, paperform_submission_id, ...)

List Papersign e-signature documents (id, name, status, folder, space, signers, variables, source form/submission, sent/completed dates), filtered by name, status, folder, space or the Paperform submission that created them. Needs the Papersign API. Paperform: GET /papersign/documents.

输入模式

{
  "type": "object",
  "properties": {
    "search": {
      "description": "Only documents whose name matches this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "status": {
      "description": "Only documents in these statuses.",
      "minItems": 1,
      "maxItems": 7,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "draft",
          "inProgress",
          "archived",
          "canceled",
          "expired",
          "rejected",
          "completed"
        ]
      }
    },
    "folder_id": {
      "description": "Only documents in this folder or its subfolders (from paperform_list_papersign_folders).",
      "type": "string",
      "pattern": "^[1-9]\\d{0,18}$"
    },
    "space_id": {
      "description": "Only documents anywhere in this space (from paperform_list_papersign_spaces).",
      "type": "string",
      "pattern": "^[1-9]\\d{0,18}$"
    },
    "paperform_submission_id": {
      "description": "Only documents created from this Paperform submission id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "limit": {
      "description": "Results per page, 1-100 (Paperform default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "skip": {
      "description": "Results to skip (offset). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "after_id": {
      "description": "Cursor: only results after this id (e.g. the previous reply's last_id).",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "before_id": {
      "description": "Cursor: only results before this id.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "after_date": {
      "description": "Only results created after this ISO 8601 date-time (UTC). Ignored by Paperform when after_id is set.",
      "type": "string"
    },
    "before_date": {
      "description": "Only results created before this ISO 8601 date-time (UTC). Ignored by Paperform when before_id is set.",
      "type": "string"
    },
    "sort": {
      "description": "Sort by created_at: DESC (default, newest first) or ASC.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_get_papersign_document(document_id)

Fetch one Papersign document by id: status, signers and their progress, variables, folder, space and dates. Needs the Papersign API. Paperform: GET /papersign/documents/{id}.

输入模式

{
  "type": "object",
  "properties": {
    "document_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The Papersign document id (from paperform_list_papersign_documents)."
    }
  },
  "required": [
    "document_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_get_signed_document_url(document_id)

Get a download link for a completed (fully signed) Papersign document as a PDF. A fresh link is made on each call and is valid for one week (expires_at_utc). Needs the Papersign API. Paperform: GET /papersign/documents/{id}/completed-document-url.

输入模式

{
  "type": "object",
  "properties": {
    "document_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The id of a completed Papersign document."
    }
  },
  "required": [
    "document_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_papersign_folders(space_id, folder_id, search)

List Papersign folders (id, name, parent_id, space_id), optionally inside one space or folder. Needs the Papersign API. Paperform: GET /papersign/folders.

输入模式

{
  "type": "object",
  "properties": {
    "space_id": {
      "description": "Only folders in this space.",
      "type": "string",
      "pattern": "^[1-9]\\d{0,18}$"
    },
    "folder_id": {
      "description": "Only folders below this folder.",
      "type": "string",
      "pattern": "^[1-9]\\d{0,18}$"
    },
    "search": {
      "description": "Only folders whose name matches this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢paperform_list_papersign_spaces(search)

List Papersign spaces (id, name, root_folder_id). Needs the Papersign API. Paperform: GET /papersign/spaces.

输入模式

{
  "type": "object",
  "properties": {
    "search": {
      "description": "Only spaces whose name matches this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴paperform_create_coupon(form, code, enabled, target, discountAmount, ...)

WRITE: create a coupon code on a form, with a fixed discountAmount or a discountPercentage (not both), an optional target (price or subscription) and expiry. Respondents can use it at checkout as soon as it is enabled. Undo: paperform_update_coupon with enabled=false. Paperform: POST /forms/{slug_or_id}/coupons.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "code": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "The new coupon code, e.g. SPRING20."
    },
    "enabled": {
      "description": "Whether respondents can use the coupon.",
      "type": "boolean"
    },
    "target": {
      "description": "What the discount applies to: the one-off price or a subscription.",
      "type": "string",
      "enum": [
        "price",
        "subscription"
      ]
    },
    "discountAmount": {
      "description": "A fixed discount, in the form's currency (e.g. 10 = 10.00).",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000
    },
    "discountPercentage": {
      "description": "A percentage discount, 0-100.",
      "type": "number",
      "minimum": 0,
      "maximum": 100
    },
    "expiresAt": {
      "description": "When the coupon expires (ISO 8601 with a timezone), or null for no expiry.",
      "anyOf": [
        {
          "type": "string",
          "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z (sent to Paperform in UTC)."
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "form",
    "code"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴paperform_update_coupon(form, code, enabled, target, discountAmount, ...)

WRITE: change a coupon on a form — enable or disable it, change its discount (amount or percentage), target or expiry (null = never expires). Only the fields you pass are sent. Paperform: PUT /forms/{slug_or_id}/coupons/{code}.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "code": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The coupon code, e.g. DISCOUNT1."
    },
    "enabled": {
      "description": "Whether respondents can use the coupon.",
      "type": "boolean"
    },
    "target": {
      "description": "What the discount applies to: the one-off price or a subscription.",
      "type": "string",
      "enum": [
        "price",
        "subscription"
      ]
    },
    "discountAmount": {
      "description": "A fixed discount, in the form's currency (e.g. 10 = 10.00).",
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000
    },
    "discountPercentage": {
      "description": "A percentage discount, 0-100.",
      "type": "number",
      "minimum": 0,
      "maximum": 100
    },
    "expiresAt": {
      "description": "When the coupon expires (ISO 8601 with a timezone), or null for no expiry.",
      "anyOf": [
        {
          "type": "string",
          "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z (sent to Paperform in UTC)."
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "form",
    "code"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴paperform_set_product_quantity(form, sku, quantity)

WRITE: set how many units of a form product are available (its stock quantity), e.g. after restocking. Replaces the current value; read it first with paperform_get_product. Not atomic: it overwrites rather than adjusts, so a sale between your read and this write is lost. Paperform: PUT /forms/{slug_or_id}/products/{sku}/quantity.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "sku": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The product SKU (from paperform_list_products)."
    },
    "quantity": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000000,
      "description": "The new stock quantity (0 or more)."
    }
  },
  "required": [
    "form",
    "sku",
    "quantity"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴paperform_set_product_sold(form, sku, sold)

WRITE: set the number of units of a form product recorded as sold (e.g. to correct it after a refund or an offline sale). Replaces the current value; read it first with paperform_get_product. Not atomic: it overwrites rather than adjusts, so a sale between your read and this write is lost. Paperform: PUT /forms/{slug_or_id}/products/{sku}/sold.

输入模式

{
  "type": "object",
  "properties": {
    "form": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The form's slug, custom slug or id (from paperform_list_forms)."
    },
    "sku": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The product SKU (from paperform_list_products)."
    },
    "sold": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000000,
      "description": "The new sold count (0 or more)."
    }
  },
  "required": [
    "form",
    "sku",
    "sold"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本23 个工具