Attesto

Marketplace

Marketplace dei connettori

Attesto Marketplace su https://marketplace.attesto.eu è il catalogo pubblico per evidence producers validati. I visitatori pubblici possono sfogliare connector cards. Tenant acquisition, install, update, revoke e artifact download richiedono una dashboard tenant session autenticata. Publisher signup, publisher profile management e connector submission usano un account developer marketplace-only separato. Attesto review e publication sono processi interni privati e non sono esposti a visitatori pubblici o marketplace developers.

Marketplace model

Un marketplace item è un connector asset validato. Il catalogo conserva asset metadata, current version, manifest hash, artifact hash, validation result, entitlement state, install state e marketplace evidence events. Il marketplace non esegue codice connector nel browser e non espone connector secrets.

ObjectSignificato
assetUn connector listing come GitHub, GitLab o S3/R2 object commitments.
versionUn connector manifest validato con manifest e artifact hashes.
entitlementIl diritto del tenant di scaricare o installare una version.
installUn installation record tenant-scoped per la version selezionata.
evidence eventUna marketplace receipt canonica per acquisition, installation, submission o validation.

Sfoglia il catalogo pubblico

Il catalogo pubblico espone solo assets pubblici validati. È sicuro da sfogliare senza tenant session:

GET https://marketplace.attesto.eu/v1/marketplace/categories
GET https://marketplace.attesto.eu/v1/marketplace/items?category=devops
GET https://marketplace.attesto.eu/v1/marketplace/items/attesto-github-repository-reference

Ogni card mostra evidence score, validation state, supported languages, category, current version e documentation link. I visitatori pubblici vedono una sign-in action invece dei commands acquire/install/download.

Evidence Score non è un rating marketing. È un output deterministico di attesto-marketplace-validation-v1: lo stesso manifest, source reference e validator version producono lo stesso score. Lo score è la somma di criteri espliciti per receipts, offline verification, secret scanning, dependency scanning, witness compatibility, documentation, repository reference, Proofstream capability, source reference e lingue Attesto supportate. Il validation report conserva formula, criteria, components, total e max così operators e publishers possono riprodurre perché un connettore ha ricevuto il suo tier.

Tenant acquisition and install lifecycle

Tenant users con ruolo owner, admin o developer possono acquire e installare un connettore first-party gratuito. Il browser deve avere tenant session cookie e CSRF token leggibile. I production cookies sono scoped su .attesto.eu, quindi una session creata su dashboard.attesto.eu funziona anche su marketplace.attesto.eu.

POST /v1/marketplace/items/attesto-github-repository-reference/acquire
X-CSRF-Token: <attesto_csrf cookie>

POST /v1/marketplace/items/attesto-github-repository-reference/install
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "configRef": "tenant-managed-github-installation"
}

Gli assets gratuiti installati possono essere aggiornati alla current validated version o revoked da owner/admin. Revoke disattiva sia entitlement sia tenant install; artifact download fallisce finché il tenant non acquire e installa di nuovo l'asset.

POST /v1/marketplace/items/attesto-github-repository-reference/install/update
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "configRef": "tenant-managed-github-installation-v2"
}

POST /v1/marketplace/items/attesto-github-repository-reference/revoke
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "reason": "tenant_request"
}

L'artifact endpoint restituisce il connector manifest solo dopo che il tenant ha un entitlement attivo:

GET /v1/marketplace/items/attesto-github-repository-reference/artifact

Connector manifest

Un manifest descrive il connettore senza includere secrets. È l'oggetto che Python, TypeScript, Go, CLI, backend validation e marketplace validano tutti contro lo stesso contract.

{
  "schemaVersion": "attesto.connector.v2",
  "slug": "attesto-github-repository-reference",
  "name": "GitHub Repository Reference",
  "version": "1.0.0",
  "assetType": "connector",
  "category": "devops",
  "summary": "Creates Proofstream references for repository changes.",
  "description": "Records repository change references as verifiable Attesto events.",
  "publisher": {
    "slug": "attesto",
    "name": "Attesto"
  },
  "repository": {
    "url": "https://git.example.com/attesto/connectors/github"
  },
  "documentation": {
    "url": "https://docs.attesto.eu/manuals/connectors.html#github"
  },
  "capabilities": ["proofstream", "offline-verification"],
  "evidence": {
    "receipts": true,
    "offlineVerification": true,
    "witnessCompatible": true
  },
  "security": {
    "secretScan": true,
    "dependencyScan": true
  },
  "supportedLanguages": ["en", "nl", "de", "fr", "es", "pl", "it"],
  "provider": {
    "id": "github",
    "name": "GitHub",
    "websiteUrl": "https://github.com"
  },
  "auth": {
    "mode": "signed-webhook",
    "scopes": ["repo", "push-events"]
  },
  "sync": {
    "modes": ["webhook"],
    "supportsReplay": true,
    "rateLimitPolicy": "provider-default"
  },
  "eventTypes": ["repository.push", "repository.merge_request"],
  "sourceTime": {
    "required": true,
    "timezonePolicy": "source-offset-required"
  },
  "configSchema": { "type": "object", "properties": {} },
  "secretSchema": { "type": "object", "properties": {} },
  "diagnostics": {
    "providerAuthStatus": true,
    "testConnection": true,
    "syncLag": true,
    "replayConflictCheck": true,
    "revocationCheck": true
  },
  "runtime": {
    "officialConnectorKit": true,
    "sdkSurfaces": ["python", "typescript", "go", "cli"],
    "requiredMethods": [
      "metadata",
      "validateConfig",
      "testConnection",
      "sync",
      "handleWebhook",
      "emitProofstreamEvent",
      "diagnostics",
      "revoke"
    ],
    "canary": {
      "status": "green",
      "ref": "release/attesto-2.0-connector-assurance-readiness/result.json"
    }
  },
  "installRequirements": {
    "tenantLoginRequired": true,
    "entitlementRequired": true
  },
  "changelog": [
    {
      "version": "1.0.0",
      "date": "2026-06-09",
      "changes": ["Validated first-party connector release."]
    }
  ]
}

I campi richiesti vengono controllati prima che un asset possa essere accettato. Il backend validator fa fallire hidden assets sotto Evidence Score 50; Attesto può comunque applicare una release policy privata più severa per connectors first-party o partner. Uno score è validation output derivato da evidence, non un adoption badge o giudizio marketing.

Marketplace CLI publishing flow

Publisher automation può usare Attesto CLI per lo stesso manifest contract del backend e dei connector kits. La CLI valida il manifest localmente prima di inviare qualcosa ad Attesto. Submission usa un marketplace publisher bearer token. La documentazione pubblica copre solo il publisher path; Attesto review e publication restano processi interni privati. I comandi publisher non stampano mai stored tokens, Stripe identifiers, connector secrets o raw customer payloads.

attesto --json marketplace init \
  --output attesto.connector.json \
  --slug acme-risk-connector \
  --name "ACME Risk Connector" \
  --version 1.0.0 \
  --category ai-governance \
  --summary "Produces Attesto evidence for ACME risk decisions." \
  --description "Produces verifiable Proofstream events for ACME risk decisions." \
  --publisher-slug acme \
  --publisher-name ACME \
  --repository-url https://git.example.com/acme/risk-connector \
  --docs-url https://docs.example.com/acme/risk-connector \
  --provider-url https://example.com/acme \
  --auth-mode oauth2 \
  --auth-scopes risk.read,risk.events \
  --sync-modes polling,webhook \
  --event-types risk.decision.created,risk.decision.updated \
  --canary-ref release/acme-risk-connector/canary-result.json \
  --capabilities proofstream,offline-verification

attesto --json marketplace validate \
  --manifest-file attesto.connector.json

attesto --json --token-env ATTESTO_MARKETPLACE_TOKEN marketplace submit \
  --manifest-file attesto.connector.json \
  --source-ref https://git.example.com/acme/risk-connector/releases/v1.0.0 \
  --visibility public \
  --pricing-model free

Dopo submission, l'asset resta private pending Attesto review. Attesto esamina validation evidence, source reference, publisher identity, pricing e release provenance in privato. Le docs pubbliche si fermano intenzionalmente alla developer submission boundary.

Publisher validation

Marketplace developer accounts sono marketplace-only. Possono fare signup e signin su marketplace.attesto.eu, gestire un publisher profile, scegliere un developer tier, inviare connector assets gratuiti per private Attesto review e avviare il reale developer billing flow per paid publishing. Non possono accedere a dashboard.attesto.eu; i normali tenant users hanno ancora bisogno di un normale Attesto tenant account per il dashboard.

POST /v1/marketplace/auth/signup
Content-Type: application/json

{
  "displayName": "ACME Evidence Labs",
  "name": "Publisher Operator",
  "email": "publisher@example.com",
  "password": "<operator-chosen password>"
}

POST /v1/marketplace/auth/login
Content-Type: application/json

{
  "email": "publisher@example.com",
  "password": "<operator-chosen password>"
}

GET /v1/marketplace/auth/me

Creare o aggiornare un publisher profile registra marketplace evidence prima della submission degli assets. Un profile da solo non pubblica mai un asset: free submissions sono private pending review, e paid submissions richiedono un paid developer tier attivo più Stripe Connect readiness. Questo impedisce al marketplace pubblico di diventare una superficie di upload aperta.

POST /v1/marketplace/publisher/profile
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "displayName": "Attesto Official Connector Team"
}

GET /v1/marketplace/publisher/profile

PATCH /v1/marketplace/publisher/profile
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "displayName": "Attesto Business Connectors"
}

Developer publisher rights vengono aggiornati in-place. Il publisher mantiene lo stesso account marketplace-only e publisher profile. Community developers possono inviare free assets per private review. Verified Developer, Professional Publisher e Marketplace Partner plans usano un 14-day Stripe trial e sbloccano paid connector submission solo dopo che Stripe conferma la subscription. Paid listing publication richiede anche Stripe Connect payout readiness. Checkout e portal URLs sono creati server-side tramite encrypted Stripe integration store.

GET /v1/marketplace/developer-tiers

[
  {
    "tier": "community",
    "label": "Free Developer",
    "monthlyCents": 0,
    "annualCents": 0,
    "currency": "EUR",
    "checkoutRequired": false,
    "submissionEnabledWhenActive": false,
    "description": "Marketplace-only developer identity for profile management, manifest preparation, documentation review, and free connector submission into private Attesto review.",
    "requirements": [
      "marketplace publisher profile",
      "private Attesto review before public listing",
      "paid developer publisher tier before paid connector submission"
    ],
    "trialDays": 0
  },
  {
    "tier": "premium",
    "label": "Verified Developer",
    "monthlyCents": 1900,
    "annualCents": 19000,
    "currency": "EUR",
    "checkoutRequired": true,
    "submissionEnabledWhenActive": true,
    "description": "Paid developer publishing tier with a 14-day Stripe trial.",
    "requirements": [
      "active developer subscription",
      "connector validation passes",
      "private Attesto review before public listing"
    ],
    "trialDays": 14
  }
]

GET /v1/marketplace/publisher/billing-state

{
  "publisher": {
    "tier": "premium",
    "developerSubscriptionState": "active",
    "payoutState": "ready",
    "commercialEnabled": true
  },
  "checkoutAvailable": true,
  "billingPortalAvailable": true,
  "canSubmitAssets": true,
  "developerSignupRequired": false,
  "supportedTiers": [
    {"tier": "premium", "label": "Verified Developer", "monthlyCents": 1900, "annualCents": 19000, "currency": "EUR"},
    {"tier": "professional", "label": "Professional Publisher", "monthlyCents": 4900, "annualCents": 49000, "currency": "EUR"},
    {"tier": "partner", "label": "Marketplace Partner", "monthlyCents": 9900, "annualCents": 99000, "currency": "EUR"}
  ],
  "submissionRequirements": [],
  "commercialRequirements": [
    "active developer subscription",
    "Stripe Connect payout readiness"
  ],
  "gracePeriodDays": 14
}

POST /v1/marketplace/publisher/upgrade
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "tier": "premium",
  "interval": "month",
  "successUrl": "https://marketplace.attesto.eu/?publisher=upgrade-success",
  "cancelUrl": "https://marketplace.attesto.eu/?publisher=upgrade-cancel"
}

POST /v1/marketplace/publisher/billing-portal
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "returnUrl": "https://marketplace.attesto.eu/?publisher=billing-return"
}

I publishers che vogliono vendere paid assets devono completare Stripe Connect payout onboarding dopo che il developer account è attivo. L'API usa la configurazione Stripe cifrata server-side di Attesto e restituisce solo una Stripe-hosted onboarding URL. Non restituisce Stripe secret keys, connected-account IDs o payout credentials al frontend.

POST /v1/marketplace/publisher/payout/onboarding
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "returnUrl": "https://marketplace.attesto.eu/?publisher=payout-return",
  "refreshUrl": "https://marketplace.attesto.eu/?publisher=payout-refresh",
  "country": "NL"
}

POST /v1/marketplace/publisher/payout/status

Paid connector acquisition usa Stripe Checkout con Stripe Connect. Il backend crea la Checkout Session, applica la Attesto application fee, instrada la developer share al connected account e attende il verified Stripe webhook prima di creare tenant entitlement e marketplace ledger entry.

POST /v1/marketplace/items/{slug}/acquire
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "successUrl": "https://marketplace.attesto.eu/?marketplace=checkout-success",
  "cancelUrl": "https://marketplace.attesto.eu/?marketplace=checkout-cancel"
}

Webhook result:
marketplace_purchase_created
marketplace_entitlement_created
marketplace_revenue_split_recorded

Anche le notifiche Stripe refund e payout sono elaborate tramite l'endpoint verified webhook. Un full refund chiude l'entitlement, revoca gli install attivi per il connettore, blocca artifact download e registra refund ed entitlement-revocation evidence. I payout events riconciliano eligible publisher ledger entries e registrano payout evidence senza esporre Stripe object identifiers o provider payloads al browser.

Webhook result for full refund:
marketplace_refund_recorded
marketplace_entitlement_revoked

Webhook result for payout:
developer_payout_completed

Webhook result for failed payout/refund:
developer_payout_failed
marketplace_refund_failed

Active developer publishers possono poi inviare business connectors tramite la marketplace publisher surface. La submit action valida il manifest, registra un validation run, crea un private pending-review asset, conserva version hashes e registra marketplace evidence. Anche quando visibility è richiesta come public, il listing resta nascosto finché private Attesto review e publication policy non sono completate. Tenants non qualificati ricevono una risposta fail-closed prima che la manifest validation venga eseguita.

POST /v1/marketplace/publisher/assets
Content-Type: application/json
X-CSRF-Token: <attesto_csrf cookie>

{
  "sourceRef": "https://example.com/repository/connector-release",
  "visibility": "private",
  "pricingModel": "free",
  "manifest": { "...": "attesto.connector.v2 manifest" }
}

Attesto review e publication sono processi interni privati. Scrivono marketplace evidence, ma questi internal endpoints e procedures non fanno parte della documentazione pubblica developer. Il catalogo pubblico restituisce solo versioni approved e non-revoked.

La source reference deve puntare alla reale release source del connettore. Secrets, private keys, API tokens e customer payloads non devono mai essere inseriti nei connector manifests.

Marketplace evidence events

Marketplace publisher profile create/update, acquisition, install, install update, entitlement revoke, paid purchase, refund, payout, publisher submission e validation/review actions scrivono marketplace evidence canonica. Il receipt hash deriva dalla canonical evidence envelope e payload hash; il receipt record conserva tenant, actor, subject, timestamp e sanitized payload per le tenant audit views. Così operators hanno un audit trail deterministico di chi ha cambiato publisher identity e chi ha acquired, installed, updated, reviewed, published, refunded, paid out o revoked quale connector version.

GET /v1/marketplace/evidence/<receipt-id-or-receipt-hash>

Security boundaries