EveryPage · Schema

FileSettings

All fields optional; omitted fields keep their current value.

PDFDocument SharingReaderAnalyticsPrivacySoftware-as-a-Service

Properties

Name Type Description
viewerMode string How readers see the document. `standard` shows one page at a time, `scroll` every page in one continuous column, `flipbook` and `magazine` turn pages, `swipe` is a story-style card per page.
password string Non-empty to protect (Basic+); empty string to clear.
allowDownload boolean
requireEmail boolean Gate viewing behind an email (Pro).
notifyOnView boolean Email you on each read (Basic+).
deleteAt string Fixed expiry. Uncapped for signed-in accounts on every plan (null = never expires); manage-token callers on an anonymous file are capped at 7 days. Set through a MANAGE TOKEN on an anonymous file, it
neverExpire boolean Permanent link, available to every signed-in plan (not through a manage token). Overrides deleteAt.
viewLimit integer Self-destruct after this many views (Basic+). 0 clears the limit; omit to keep. A burned link keeps its row and readership - un-burn it via content replacement.
gateDomains array Email-gate domain allowlist (Pro to set a non-empty list; [] clears on any plan).
gateFields arraynull Lead-capture form definition shown instead of the plain email prompt (Pro to set; null or [] clears on any plan). A non-empty form forces requireEmail on.
gateHeading string Heading on the gate card readers see before the document opens (Pro to set; "" clears back to the default wording on any plan; omit to keep). Trimmed; plain text, no line breaks. Shown only while requ
gateMessage string Explanatory line under the gate heading (Pro to set; "" clears on any plan; omit to keep). Trimmed; plain text, no line breaks. Shown only while requireEmail is on.
askReceipt boolean Ask viewers to confirm receipt (Basic+ to enable).
showExpiry boolean Show readers a live "Expires in" countdown next to Download (default true; any plan, either direction; omit to keep). False also withholds the expiry instant from the public share-link metadata. Moot
commentsEnabled boolean Reader feedback notes (Pro to enable).
commentsAllowPublic boolean Let commenters opt into public display.
notifyOnComment boolean Email you (throttled) when a note arrives.
marksEnabled boolean Proofing page marks (Pro to enable).
annotationsEnabled boolean Proofing annotations (Pro to enable).
watermark boolean Stamp viewer pages (Pro). Watermarked downloads are limited to files up to 100MB (400 above that).
slug string Vanity link name on your custom domain (Pro): lowercase letters, digits, and hyphens; "" clears. 409 when another of your files already uses it.
canvaUpdatesEnabled boolean May a Canva-side republish of the bound design replace this file's bytes? Defaults true; only meaningful on files with a canvaDesignId. Un-gated on every plan in both directions - it is a safety contr
detachCanvaDesign boolean True permanently severs the file from the Canva design that published it: no future publish of the design can update this link (the next publish creates a fresh one). One-way - there is no re-bind thr
viewerSettings object The viewer appearance/behavior blob. Blocks: `background` (type solid|gradient|image with color/gradient preset/assetId, fit, blur 0-20, dim 0-80), `logo` (assetId, position tl|tr|bl|br, size s|m|l|xl
pageRange object Limit non-owner viewers to a page window: pages outside it are trimmed server-side before any bytes are served (the hidden pages never reach the browser; the public metadata advertises the active wind
View JSON Schema on GitHub

JSON Schema

everypage-co-file-settings-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/everypage-co/json-schema/everypage-co-file-settings-schema.json",
  "title": "FileSettings",
  "description": "All fields optional; omitted fields keep their current value.",
  "x-generated": "2026-11-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/everypage-openapi.json#/components/schemas/FileSettings",
  "type": "object",
  "properties": {
    "viewerMode": {
      "type": "string",
      "description": "How readers see the document. `standard` shows one page at a time, `scroll` every page in one continuous column, `flipbook` and `magazine` turn pages, `swipe` is a story-style card per page.",
      "enum": [
        "standard",
        "scroll",
        "flipbook",
        "swipe",
        "magazine"
      ]
    },
    "password": {
      "type": "string",
      "description": "Non-empty to protect (Basic+); empty string to clear."
    },
    "allowDownload": {
      "type": "boolean"
    },
    "requireEmail": {
      "type": "boolean",
      "description": "Gate viewing behind an email (Pro)."
    },
    "notifyOnView": {
      "type": "boolean",
      "description": "Email you on each read (Basic+)."
    },
    "deleteAt": {
      "type": "string",
      "format": "date-time",
      "description": "Fixed expiry. Uncapped for signed-in accounts on every plan (null = never expires); manage-token callers on an anonymous file are capped at 7 days. Set through a MANAGE TOKEN on an anonymous file, it also marks the expiry as deliberately chosen, so a Canva republish keeps it instead of re-basing to the 365-day default - a one-way mark (the token lane has no way to hand expiry back to the system)."
    },
    "neverExpire": {
      "type": "boolean",
      "description": "Permanent link, available to every signed-in plan (not through a manage token). Overrides deleteAt."
    },
    "viewLimit": {
      "type": "integer",
      "description": "Self-destruct after this many views (Basic+). 0 clears the limit; omit to keep. A burned link keeps its row and readership - un-burn it via content replacement."
    },
    "gateDomains": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Email-gate domain allowlist (Pro to set a non-empty list; [] clears on any plan)."
    },
    "gateFields": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/GateField"
      },
      "description": "Lead-capture form definition shown instead of the plain email prompt (Pro to set; null or [] clears on any plan). A non-empty form forces requireEmail on."
    },
    "gateHeading": {
      "type": "string",
      "maxLength": 80,
      "description": "Heading on the gate card readers see before the document opens (Pro to set; \"\" clears back to the default wording on any plan; omit to keep). Trimmed; plain text, no line breaks. Shown only while requireEmail is on."
    },
    "gateMessage": {
      "type": "string",
      "maxLength": 280,
      "description": "Explanatory line under the gate heading (Pro to set; \"\" clears on any plan; omit to keep). Trimmed; plain text, no line breaks. Shown only while requireEmail is on."
    },
    "askReceipt": {
      "type": "boolean",
      "description": "Ask viewers to confirm receipt (Basic+ to enable)."
    },
    "showExpiry": {
      "type": "boolean",
      "description": "Show readers a live \"Expires in\" countdown next to Download (default true; any plan, either direction; omit to keep). False also withholds the expiry instant from the public share-link metadata. Moot while the link never expires."
    },
    "commentsEnabled": {
      "type": "boolean",
      "description": "Reader feedback notes (Pro to enable)."
    },
    "commentsAllowPublic": {
      "type": "boolean",
      "description": "Let commenters opt into public display."
    },
    "notifyOnComment": {
      "type": "boolean",
      "description": "Email you (throttled) when a note arrives."
    },
    "marksEnabled": {
      "type": "boolean",
      "description": "Proofing page marks (Pro to enable)."
    },
    "annotationsEnabled": {
      "type": "boolean",
      "description": "Proofing annotations (Pro to enable)."
    },
    "watermark": {
      "type": "boolean",
      "description": "Stamp viewer pages (Pro). Watermarked downloads are limited to files up to 100MB (400 above that)."
    },
    "slug": {
      "type": "string",
      "description": "Vanity link name on your custom domain (Pro): lowercase letters, digits, and hyphens; \"\" clears. 409 when another of your files already uses it."
    },
    "canvaUpdatesEnabled": {
      "type": "boolean",
      "description": "May a Canva-side republish of the bound design replace this file's bytes? Defaults true; only meaningful on files with a canvaDesignId. Un-gated on every plan in both directions - it is a safety control, not a feature."
    },
    "detachCanvaDesign": {
      "type": "boolean",
      "description": "True permanently severs the file from the Canva design that published it: no future publish of the design can update this link (the next publish creates a fresh one). One-way - there is no re-bind through settings - and un-gated on every plan. No-op on unbound files."
    },
    "viewerSettings": {
      "type": "object",
      "description": "The viewer appearance/behavior blob. Blocks: `background` (type solid|gradient|image with color/gradient preset/assetId, fit, blur 0-20, dim 0-80), `logo` (assetId, position tl|tr|bl|br, size s|m|l|xl, linkUrl, hideBadge), `page` (shadow 0-3, rounded 0-3, edges, coverAlone), `flip` (speedMs 200-1200, sound, rtl, layout adaptive|single|double), `swipe` (autoAdvance, intervalMs 3000-30000), `protect` (contextMenu/print/select Basic+; blurOnLeave Pro), `ga4Id` (Pro), `brand` (accentColor, toolbarTheme, toolbarColor #RRGGBB for the viewer toolbar strip - replaces toolbarTheme when set, badgePosition, headerColor #RRGGBB for the share page's top bar, headerLogo to show the `logo` asset there in place of the EveryPage name - dropped when no logo is set, headerButtons #RRGGBB to fill its Report and Download buttons; Pro), `cta` (label 1-40 chars, https url, style, color, position; Pro), `watermarkStyle` (opacity 0.05-0.5, density sparse|normal|dense; Pro), `gate` (the sign-in card readers see before the email or password gate: backgroundColor and buttonColor #RRGGBB, imageAssetId of a `gate-image` asset, imageStyle logo|banner; Pro), and `preview` (the link preview chat apps and social sites show for the share link: title 1-70 chars, required whenever the block is set, description up to 200 chars, imageAssetId of a `preview-image` asset composed into the 1200x630 card; shown even when the document is gated; never copied by templates; Pro). Any deviation from the defaults requires Basic+; unknown fields are dropped and out-of-range values clamped. Tier gates are re-applied at serve time, so a downgraded plan's Pro styling stops rendering for viewers immediately.\n"
    },
    "pageRange": {
      "allOf": [
        {
          "$ref": "#/$defs/PageRange"
        }
      ],
      "description": "Limit non-owner viewers to a page window: pages outside it are trimmed server-side before any bytes are served (the hidden pages never reach the browser; the public metadata advertises the active window as `pageRange {from,to,totalPages}` so viewers see an honest \"preview ends here\" card). Omit to keep the current range; `{\"from\":0,\"to\":0}` clears it; a valid pair (1 <= from <= to) sets it. SETTING a range requires the Pro plan and a file of at most 100MB (400 above that); CLEARING is never plan-gated. Enforcement deliberately survives a Pro downgrade: a lapsed subscription stops you setting new ranges but never widens access to pages an existing link already hides - clear the range to serve the full document again. You, the owner, always receive the full document. A per-variant `overrides.pageRange` beats this file-level range for viewers of that variant. Note pdfcpu's trim applies a reduced feature set to the served window (annotations and outlines are dropped).\n"
    }
  },
  "$defs": {
    "GateField": {
      "type": "object",
      "description": "One field of a lead-capture gate form. A form holds 1-10 fields, exactly one of type email (always first and required).",
      "required": [
        "key",
        "label",
        "type"
      ],
      "properties": {
        "key": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9_]{0,39}$",
          "description": "Unique snake_case key; submitted values and captured responses are keyed by it."
        },
        "label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300
        },
        "type": {
          "type": "string",
          "enum": [
            "text",
            "email",
            "phone",
            "company",
            "select"
          ],
          "description": "`select` is a drop-down: the viewer picks exactly one of `options`. Text, phone and company values are capped at 500 characters."
        },
        "required": {
          "type": "boolean"
        },
        "options": {
          "type": "array",
          "minItems": 2,
          "maxItems": 20,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "description": "The drop-down choices (type `select` only; unique). Omitted for every other type."
        }
      }
    },
    "PageRange": {
      "type": "object",
      "description": "A non-owner page window, 1-based and inclusive. `{\"from\":0,\"to\":0}` is the explicit \"no range\" value (clears the file-level range; as a variant override it serves the full document through that variant).\n",
      "properties": {
        "from": {
          "type": "integer",
          "minimum": 0,
          "description": "First shared page (1-based)."
        },
        "to": {
          "type": "integer",
          "minimum": 0,
          "maximum": 20000,
          "description": "Last shared page (inclusive; must be >= from)."
        }
      }
    }
  }
}

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/everypage-co-file-settings"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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.