{
 "openapi": "3.1.0",
 "info": {
  "title": "ProSignature agent API",
  "version": "1.0.0",
  "summary": "Free email signatures without an account, and the price list as JSON.",
  "description": "GET or POST /api/v1/signature returns the free plan's email-safe HTML signature (table + inline styles, four layouts, six colours, a small clickable 'Created with ProSignature' credit line), a plain-text version, an edit_url that opens the generator prefilled from the URL fragment, and install steps. GET /pricing.json returns the price list from the same constants the app uses. Nothing is fetched server-side, nothing is stored, bodies are never logged. Verified 18 October 2026. Agent guide: https://prosignature.co/for-ai-agents. MCP server with the same tools: https://prosignature.co/mcp.",
  "termsOfService": "https://prosignature.co/privacy",
  "contact": {
   "name": "ProSignature",
   "url": "https://prosignature.co/for-ai-agents"
  }
 },
 "externalDocs": {
  "description": "ProSignature for AI agents",
  "url": "https://prosignature.co/for-ai-agents"
 },
 "servers": [
  {
   "url": "https://prosignature.co"
  }
 ],
 "x-mcp": {
  "url": "https://prosignature.co/mcp",
  "transport": "streamable-http",
  "descriptor": "https://prosignature.co/.well-known/mcp/server.json",
  "tools": [
   "create_signature",
   "list_layouts",
   "quote_price",
   "get_install_steps",
   "get_facts"
  ]
 },
 "paths": {
  "/api/v1/signature": {
   "get": {
    "operationId": "getSignature",
    "summary": "Build a signature from query parameters",
    "description": "Encode + as %2B and # as %23. Limits: fields ≤120 characters (website ≤200), 60 requests per minute per IP.",
    "parameters": [
     {
      "name": "name",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "maxLength": 120,
       "description": "Full name (required)"
      },
      "description": "Full name (required)"
     },
     {
      "name": "title",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "maxLength": 120,
       "description": "Job title"
      },
      "description": "Job title"
     },
     {
      "name": "company",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "maxLength": 120,
       "description": "Company or business name"
      },
      "description": "Company or business name"
     },
     {
      "name": "phone",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "maxLength": 120,
       "description": "Phone as it should read; the tel: link keeps digits and +"
      },
      "description": "Phone as it should read; the tel: link keeps digits and +"
     },
     {
      "name": "email",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "maxLength": 120,
       "description": "Email address"
      },
      "description": "Email address"
     },
     {
      "name": "website",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "maxLength": 200,
       "description": "Bare domain (https:// is added) or an http(s) URL; other schemes are rejected"
      },
      "description": "Bare domain (https:// is added) or an http(s) URL; other schemes are rejected"
     },
     {
      "name": "layout",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "classic",
        "stacked",
        "minimal",
        "card"
       ],
       "default": "classic",
       "description": "Layout id"
      },
      "description": "Layout id"
     },
     {
      "name": "colour",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "pattern": "^#[0-9a-fA-F]{6}$",
       "default": "#E8604C",
       "description": "Accent colour #rrggbb; alias color. The page offers #E8604C, #2B6CB0, #2F855A, #6B46C1, #2B2620, #B7791F"
      },
      "description": "Accent colour #rrggbb; alias color. The page offers #E8604C, #2B6CB0, #2F855A, #6B46C1, #2B2620, #B7791F"
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "html",
        "text"
       ],
       "default": "json"
      },
      "description": ""
     }
    ],
    "responses": {
     "200": {
      "description": "The signature",
      "headers": {
       "Cache-Control": {
        "schema": {
         "type": "string"
        },
        "description": "no-store"
       },
       "Content-Security-Policy": {
        "schema": {
         "type": "string"
        },
        "description": "format=html only: sandbox; default-src 'none'; img-src https:"
       },
       "Content-Disposition": {
        "schema": {
         "type": "string"
        },
        "description": "format=html only: attachment; filename=\"signature.html\" — the HTML comes as a download, never rendered inline on prosignature.co; agents using fetch read the body unchanged"
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/SignatureResponse"
        }
       },
       "text/html": {
        "schema": {
         "type": "string"
        },
        "example": "<table …>…</table><div …>Created with …</div>"
       },
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "400": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      },
      "description": "A field broke a rule; error says which"
     },
     "405": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      },
      "description": "Method not allowed"
     },
     "429": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      },
      "description": "Rate limit: 60 requests per minute per IP (Retry-After set)"
     }
    }
   },
   "post": {
    "operationId": "postSignature",
    "summary": "Build a signature from a JSON body",
    "description": "Same fields as GET, as a JSON object ≤4 KB. Unknown keys are ignored; there is no logo URL (nothing is fetched).",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/SignatureInput"
       },
       "example": {
        "name": "Dana Levi",
        "title": "Owner",
        "company": "Levi Plumbing",
        "phone": "+972 50-123-4567",
        "email": "dana@leviplumbing.co.il",
        "website": "leviplumbing.co.il",
        "layout": "classic",
        "colour": "#2B6CB0"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The signature",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/SignatureResponse"
        }
       },
       "text/html": {
        "schema": {
         "type": "string"
        }
       },
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "400": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      },
      "description": "A field broke a rule, or the body is not a JSON object"
     },
     "405": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      },
      "description": "Method not allowed"
     },
     "413": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      },
      "description": "Body over 4 KB"
     },
     "429": {
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      },
      "description": "Rate limit: 60 requests per minute per IP (Retry-After set)"
     }
    }
   }
  },
  "/pricing.json": {
   "get": {
    "operationId": "getPricing",
    "summary": "The price list (USD), verified 18 October 2026",
    "description": "Pro costs $4/month billed yearly ($48/year) or $6/month billed monthly. Prices are in USD. Teams is $0.80 per person per month billed yearly, with a 5-person minimum: $4/month ($48/year) covers up to 5 people, 10 people cost $8/month ($96/year) and 15 people cost $12/month ($144/year). Billed monthly it is $1.20 per person ($6/month for up to 5 people). 14-day free trial.",
    "responses": {
     "200": {
      "description": "Plans, rates, examples and the canonical sentences",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Pricing"
        },
        "example": {
         "product": "ProSignature",
         "url": "https://prosignature.co/pricing",
         "currency": "USD",
         "verified": "2026-10-18",
         "verified_text": "18 October 2026",
         "source": "https://prosignature.co/pricing.json",
         "positioning": "Email signatures for Gmail and Google Workspace teams of 2–15 people — one branded design, each person's own details, installed in a minute without IT.",
         "pages": {
          "pricing": "https://prosignature.co/pricing",
          "compare": "https://prosignature.co/pricing#compare",
          "free": "https://prosignature.co/free-email-signature",
          "teams": "https://prosignature.co/email-signature-for-teams",
          "agents": "https://prosignature.co/for-ai-agents"
         },
         "plans": [
          {
           "id": "free",
           "name": "Free",
           "price_per_month": 0,
           "credit_line": true,
           "trial": false,
           "card_required": false,
           "includes": "Design and preview all 13 templates; install the Basic template; automatic brand import from your website; free Chrome extension for Gmail; copy-paste HTML for Outlook, Microsoft 365 and Apple Mail",
           "sentence": "The free plan is free to keep, with no credit card and no trial clock: design and preview all 13 templates, then install the Basic template. Free signatures carry one small clickable 'Created with ProSignature' line under the signature; Pro removes it."
          },
          {
           "id": "pro",
           "name": "Pro",
           "people": 1,
           "yearly": {
            "per_month": 4,
            "per_year": 48
           },
           "monthly": {
            "per_month": 6
           },
           "credit_line": false,
           "sentence": "Pro costs $4/month billed yearly ($48/year) or $6/month billed monthly. Prices are in USD.",
           "adds": "Pro unlocks all 13 templates, the call-to-action button, promo banners and finer design controls, and removes the free plan's credit line."
          },
          {
           "id": "teams",
           "name": "Teams",
           "per_person": {
            "yearly_per_month": 0.8,
            "monthly_per_month": 1.2
           },
           "yearly": {
            "per_person_per_month": 0.8
           },
           "monthly": {
            "per_person_per_month": 1.2
           },
           "minimum_people": 5,
           "person_minimum": 5,
           "trial_days": 14,
           "formula": "rate * max(5, people)",
           "formula_detail": "per_month = rate * max(person_minimum, people); the admin counts as one person; billed yearly per_year = per_month * 12",
           "examples": [
            {
             "people": 2,
             "yearly": 4,
             "monthly": 6,
             "yearly_per_month": 4,
             "yearly_per_year": 48,
             "monthly_per_month": 6
            },
            {
             "people": 5,
             "yearly": 4,
             "monthly": 6,
             "yearly_per_month": 4,
             "yearly_per_year": 48,
             "monthly_per_month": 6
            },
            {
             "people": 8,
             "yearly": 6.4,
             "monthly": 9.6,
             "yearly_per_month": 6.4,
             "yearly_per_year": 76.8,
             "monthly_per_month": 9.6
            },
            {
             "people": 10,
             "yearly": 8,
             "monthly": 12,
             "yearly_per_month": 8,
             "yearly_per_year": 96,
             "monthly_per_month": 12
            },
            {
             "people": 15,
             "yearly": 12,
             "monthly": 18,
             "yearly_per_month": 12,
             "yearly_per_year": 144,
             "monthly_per_month": 18
            },
            {
             "people": 20,
             "yearly": 16,
             "monthly": 24,
             "yearly_per_month": 16,
             "yearly_per_year": 192,
             "monthly_per_month": 24
            },
            {
             "people": 50,
             "yearly": 40,
             "monthly": 60,
             "yearly_per_month": 40,
             "yearly_per_year": 480,
             "monthly_per_month": 60
            }
           ],
           "over": {
            "people": 50,
            "note": "Talk to us"
           },
           "credit_line": false,
           "credit_line_during_trial": true,
           "model": "$0.80 per person per month billed yearly, with a 5-person minimum and no platform fee",
           "sentence": "Teams is $0.80 per person per month billed yearly, with a 5-person minimum: $4/month ($48/year) covers up to 5 people, 10 people cost $8/month ($96/year) and 15 people cost $12/month ($144/year). Billed monthly it is $1.20 per person ($6/month for up to 5 people). 14-day free trial."
          }
         ],
         "coupon": {
          "code": "WELCOME33",
          "percent_off_first_payment": 33,
          "applies_to": [
           "pro",
           "teams"
          ],
          "note": "First payment only: the first year on yearly billing, the first month on monthly billing."
         },
         "sentences": {
          "pro": "Pro costs $4/month billed yearly ($48/year) or $6/month billed monthly. Prices are in USD.",
          "teams": "Teams is $0.80 per person per month billed yearly, with a 5-person minimum: $4/month ($48/year) covers up to 5 people, 10 people cost $8/month ($96/year) and 15 people cost $12/month ($144/year). Billed monthly it is $1.20 per person ($6/month for up to 5 people). 14-day free trial.",
          "credit_line": "Free signatures carry one small clickable 'Created with ProSignature' line under the signature; Pro removes it."
         },
         "notes": [
          "List prices in USD. Checkout happens in the app after the human signs up; agents never sign up or pay.",
          "The owner or admin counts as one of the people.",
          "Billing yearly is 33% cheaper than billing monthly.",
          "50 or more people: talk to us.",
          "Pro credit: what was paid on Pro is credited to the first Teams year.",
          "Rival figures for a 10-person team, verified 18 October 2026: see https://prosignature.co/pricing#compare."
         ]
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "SignatureInput": {
    "type": "object",
    "required": [
     "name"
    ],
    "properties": {
     "name": {
      "type": "string",
      "maxLength": 120,
      "description": "Full name (required)"
     },
     "title": {
      "type": "string",
      "maxLength": 120,
      "description": "Job title"
     },
     "company": {
      "type": "string",
      "maxLength": 120,
      "description": "Company or business name"
     },
     "phone": {
      "type": "string",
      "maxLength": 120,
      "description": "Phone as it should read; the tel: link keeps digits and +"
     },
     "email": {
      "type": "string",
      "maxLength": 120,
      "description": "Email address"
     },
     "website": {
      "type": "string",
      "maxLength": 200,
      "description": "Bare domain (https:// is added) or an http(s) URL; other schemes are rejected"
     },
     "layout": {
      "type": "string",
      "enum": [
       "classic",
       "stacked",
       "minimal",
       "card"
      ],
      "default": "classic",
      "description": "Layout id"
     },
     "colour": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$",
      "default": "#E8604C",
      "description": "Accent colour #rrggbb; alias color. The page offers #E8604C, #2B6CB0, #2F855A, #6B46C1, #2B2620, #B7791F"
     },
     "format": {
      "type": "string",
      "enum": [
       "json",
       "html",
       "text"
      ],
      "default": "json"
     }
    },
    "additionalProperties": true
   },
   "Install": {
    "type": "object",
    "properties": {
     "gmail": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Paste steps, then the extension hand-off (link included)"
     },
     "gmail_settings_api": {
      "type": "string",
      "const": "PATCH users/me/settings/sendAs/{email} with gmail.settings.basic (new mail only)"
     },
     "outlook": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "apple_mail": {
      "type": "array",
      "items": {
       "type": "string"
      }
     }
    }
   },
   "SignatureResponse": {
    "type": "object",
    "required": [
     "html",
     "text",
     "credit_line",
     "plan",
     "edit_url",
     "install",
     "pricing_url",
     "verified"
    ],
    "properties": {
     "html": {
      "type": "string",
      "description": "Email-safe signature: table + inline styles, no images or scripts, ends with the credit line"
     },
     "text": {
      "type": "string",
      "description": "Plain-text version"
     },
     "credit_line": {
      "type": "boolean",
      "const": true
     },
     "plan": {
      "type": "string",
      "const": "free"
     },
     "layout": {
      "type": "string",
      "enum": [
       "classic",
       "stacked",
       "minimal",
       "card"
      ]
     },
     "colour": {
      "type": "string"
     },
     "edit_url": {
      "type": "string",
      "format": "uri",
      "description": "https://prosignature.co/email-signature-generator#name=…&layout=…&colour=… — the fragment prefills the page; nothing reaches the server"
     },
     "install": {
      "$ref": "#/components/schemas/Install"
     },
     "pricing_url": {
      "type": "string",
      "const": "https://prosignature.co/pricing.json"
     },
     "docs": {
      "type": "string",
      "const": "https://prosignature.co/for-ai-agents"
     },
     "verified": {
      "type": "string",
      "format": "date",
      "const": "2026-10-18"
     }
    },
    "example": {
     "html": "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse:collapse\"><tr><td style=\"border-left:3px solid #2B6CB0;…\">…</td></tr></table><div style=\"margin-top:11px;font:11px Arial;color:#98A0AF\">Created with <a href=\"https://prosignature.co/?utm_source=signature&amp;utm_medium=email&amp;utm_campaign=watermark\" …>ProSignature</a></div>",
     "text": "Dana Levi\nOwner · Levi Plumbing\n+972 50-123-4567 | dana@leviplumbing.co.il\nleviplumbing.co.il\nCreated with ProSignature",
     "credit_line": true,
     "plan": "free",
     "layout": "classic",
     "colour": "#2B6CB0",
     "edit_url": "https://prosignature.co/email-signature-generator#name=Dana%20Levi&title=Owner&company=Levi%20Plumbing&phone=%2B972%2050-123-4567&email=dana%40leviplumbing.co.il&website=leviplumbing.co.il&layout=classic&colour=%232B6CB0",
     "install": {
      "gmail": [
       "…steps…",
       "Extension: https://chromewebstore.google.com/detail/dkbbkjinbcmcapdbcnecafhaldeeglnl"
      ],
      "gmail_settings_api": "PATCH users/me/settings/sendAs/{email} with gmail.settings.basic (new mail only)",
      "outlook": [
       "…"
      ],
      "apple_mail": [
       "…"
      ]
     },
     "pricing_url": "https://prosignature.co/pricing.json",
     "docs": "https://prosignature.co/for-ai-agents",
     "verified": "2026-10-18"
    }
   },
   "Error": {
    "type": "object",
    "required": [
     "error"
    ],
    "properties": {
     "error": {
      "type": "string"
     },
     "docs": {
      "type": "string"
     },
     "openapi": {
      "type": "string"
     }
    }
   },
   "Pricing": {
    "type": "object",
    "required": [
     "product",
     "currency",
     "verified",
     "plans",
     "sentences"
    ],
    "properties": {
     "product": {
      "type": "string"
     },
     "currency": {
      "type": "string"
     },
     "verified": {
      "type": "string",
      "format": "date"
     },
     "plans": {
      "type": "array",
      "items": {
       "type": "object",
       "required": [
        "id"
       ],
       "properties": {
        "id": {
         "type": "string",
         "enum": [
          "free",
          "pro",
          "teams"
         ]
        },
        "yearly": {
         "type": "object"
        },
        "monthly": {
         "type": "object"
        },
        "person_minimum": {
         "type": "integer"
        },
        "trial_days": {
         "type": "integer"
        },
        "credit_line": {
         "type": "boolean"
        },
        "examples": {
         "type": "array"
        }
       }
      }
     },
     "sentences": {
      "type": "object",
      "properties": {
       "pro": {
        "type": "string"
       },
       "teams": {
        "type": "string"
       },
       "credit_line": {
        "type": "string"
       }
      }
     }
    }
   }
  }
 }
}
