Skip to content
FINTERY

MARKETPLACE · OPEN STANDARD

fintery.json: one file that explains a System.

Every System on the Fintery Marketplace ships a manifest: how it boots, which personal data it stores, which AI it calls and how it was made. The format is open, published as a JSON Schema, and any builder can write one today.

FINTERY.JSON● MANIFEST_VERSION 0
  • ↳ runtimeboots in Compose
  • ↳ data_mapchecked against schema
  • ↳ ai_surfacealias ids only
  • ↳ provenanceAI share disclosed

checked, not claimed

Why a manifest

Checkable, not promised

A manifest makes claims that can be checked. The Fintery Auditor boots the archive with the declared compose file, compares the data map with the real schema, and rejects dated model ids. Anything the manifest states that is not true becomes a finding in the published audit.

Reference

Every field, every rule

Every section is required. Empty lists are allowed where a System simply has nothing to declare.

manifest_version

The version of this format. Always 0 today.

manifest_version

RuleThe number 0

WhyIf the format changes incompatibly this number rises, and older manifests stay readable.

system

What the System is and the licence it is sold under.

system.slug

RuleLowercase kebab-case, for example strategy-dashboard

WhyBecomes the listing URL.

system.name

RuleAt least two characters

WhyThe name buyers see.

system.version

RuleSemver MAJOR.MINOR.PATCH, no leading v

WhyEvery audit covers exactly one version. A new archive needs a new number.

system.category

RuleOne of: sales, hr-hiring, finance, operations, marketing, analytics, legal-compliance

WhyFiles the System under the job it does.

system.license

RuleA licence identifier, for example fintery-perpetual-v1

WhyBuyers should know what they will own before they pay.

runtime

How the System boots. Docker Compose is the only target, so every System boots the same way.

runtime.target

Rule"docker-compose"

WhyThe Auditor boots every archive with docker compose up and checks that it answers.

runtime.compose_file

RulePath to the compose file inside the archive

WhySo nobody has to guess which file is meant.

runtime.env[]

Rulename in UPPER_SNAKE_CASE, required as true or false, a non empty description

WhyEvery variable the System reads is explained. An undeclared required variable is a finding.

data_map

Which personal data the System stores, why, and for how long. The basis for the GDPR record and the DPA.

data_map.personal_data[]

Rulefield, purpose and retention, each non empty. An empty list is allowed.

WhyThe audit reads the database schema and compares. A field the code writes and the list leaves out counts as a finding.

ai_surface

Which AI the System calls. Transparency in the spirit of the EU AI Act.

ai_surface.agents[]

Rulename, and optionally protocol with the value mcp

WhyAgents the System exposes are discoverable instead of hidden.

ai_surface.models[]

RuleAlias ids such as claude-sonnet-4-6. Dated snapshots ending in -YYYYMMDD are rejected.

WhyDated snapshots get retired, and a System you bought should not stop on a date nobody wrote down.

provenance

How the System was made.

provenance.ai_generated

Ruletrue / false

WhyAI written code is welcome. Hiding it is not.

provenance.tools[]

RuleTools used, for example claude-code

WhyBuyers see what it was built with.

provenance.human_reviewed

Ruletrue / false

WhyWhether a person read the code before it is sold.

demo

How to see the System with sample data.

demo.seed_command

RuleOne command, non empty

WhyThe Auditor and every buyer should see something real within minutes, not an empty screen.

Example

From a real, listed System

Shortened from the manifest inside the Landing + AI Concierge Kit 1.0.2 archive. It passes the same check every submission passes.

{
  "$schema": "https://fintery.com/marketplace/fintery.schema.json",
  "manifest_version": 0,
  "system": {
    "slug": "landing-concierge-kit",
    "name": "Landing + AI Concierge Kit",
    "version": "1.0.2",
    "category": "marketing",
    "license": "fintery-perpetual-v1"
  },
  "runtime": {
    "target": "docker-compose",
    "compose_file": "docker-compose.yml",
    "env": [
      {
        "name": "CONTACT_WEBHOOK_URL",
        "required": false,
        "description": "Where contact form submissions are forwarded."
      },
      {
        "name": "OPENAI_API_KEY",
        "required": false,
        "description": "Enables the AI concierge. Without it the concierge falls back to scripted answers."
      },
      {
        "name": "NEXT_PUBLIC_SITE_URL",
        "required": false,
        "description": "Public URL of the site, used for canonical links."
      }
    ]
  },
  "data_map": {
    "personal_data": [
      {
        "field": "email (contact form)",
        "purpose": "Lead capture: lets you respond to the inquiry",
        "retention": "Forwarded to your CONTACT_WEBHOOK_URL, not stored by the kit"
      },
      {
        "field": "concierge chat messages",
        "purpose": "Answering visitor questions and turn by turn lead qualification",
        "retention": "Processed in memory per request; not stored by the kit"
      }
    ]
  },
  "ai_surface": {
    "agents": [],
    "models": [
      "gpt-4.1-mini"
    ]
  },
  "provenance": {
    "ai_generated": true,
    "tools": [
      "claude-code"
    ],
    "human_reviewed": true
  },
  "demo": {
    "seed_command": "npm ci && npm run dev"
  }
}

See this System's listing

Check it yourself

Validate before you submit

The schema follows JSON Schema draft 2020-12 and works with any common validator and with editors that understand $schema. The one rule a schema cannot fully express is still in it as a pattern: model ids must not end in a date.