Attesto

Marketplace

Marketplace de conectores

Attesto Marketplace en https://marketplace.attesto.eu es el catálogo público para productores de evidencia validados. Los visitantes públicos pueden ver connector cards. Tenant acquisition, install, update, revoke y artifact download requieren una dashboard tenant session autenticada. Publisher signup, publisher profile management y connector submission usan una cuenta developer marketplace-only separada. Attesto review y publication son procesos internos privados y no se exponen a visitantes públicos ni a marketplace developers.

Marketplace model

Un marketplace item es un connector asset validado. El catálogo guarda asset metadata, current version, manifest hash, artifact hash, validation result, entitlement state, install state y marketplace evidence events. El marketplace no ejecuta código de conectores en el navegador y no expone connector secrets.

ObjectSignificado
assetUn connector listing como GitHub, GitLab o S3/R2 object commitments.
versionUn connector manifest validado con manifest y artifact hashes.
entitlementEl derecho del tenant a descargar o instalar una versión.
installUn installation record tenant-scoped para la versión seleccionada.
evidence eventUn marketplace receipt canónico para acquisition, installation, submission o validation.

Explorar el catálogo público

El catálogo público expone solo assets públicos validados. Es seguro explorarlo sin 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

Cada card muestra evidence score, validation state, supported languages, category, current version y enlace de documentación. Los visitantes públicos ven una acción sign-in en lugar de comandos acquire/install/download.

Evidence Score no es una nota de marketing. Es una salida determinista de attesto-marketplace-validation-v1: el mismo manifest, source reference y validator version producen el mismo score. El score es la suma de criterios explícitos para receipts, offline verification, secret scanning, dependency scanning, witness compatibility, documentation, repository reference, Proofstream capability, source reference y lenguajes Attesto soportados. El validation report guarda formula, criteria, components, total y max para que operators y publishers puedan reproducir por qué un conector recibió su tier.

Tenant acquisition and install lifecycle

Tenant users con rol owner, admin o developer pueden adquirir e instalar un conector first-party gratuito. El navegador debe tener la tenant session cookie y el CSRF token legible. Las production cookies están scoped a .attesto.eu, por lo que una session creada en dashboard.attesto.eu también funciona en 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"
}

Los assets gratuitos instalados pueden actualizarse a la versión validada actual o ser revocados por un owner/admin. Revoke desactiva tanto el entitlement como el tenant install; artifact download falla hasta que el tenant adquiere e instala el asset otra vez.

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"
}

El endpoint artifact devuelve el connector manifest solo después de que el tenant tenga un entitlement activo:

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

Connector manifest

Un manifest describe el conector sin incluir secretos. Es el objeto que Python, TypeScript, Go, CLI, backend validation y marketplace validan contra el mismo contrato.

{
  "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."]
    }
  ]
}

Los campos requeridos se comprueban antes de aceptar un asset. El backend validator falla hidden assets por debajo de Evidence Score 50; Attesto puede aplicar una release policy privada más estricta para connectors first-party o partner. Un score es validation output derivado de evidence, no un adoption badge ni juicio marketing.

Marketplace CLI publishing flow

Publisher automation puede usar Attesto CLI para el mismo manifest contract que backend y connector kits. La CLI valida el manifest localmente antes de enviar nada a Attesto. Submission usa un marketplace publisher bearer token. La documentación pública cubre solo el publisher path; Attesto review y publication siguen siendo procesos internos privados. Los comandos publisher nunca imprimen stored tokens, Stripe identifiers, connector secrets ni 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

Después de submission, el asset queda private pending Attesto review. Attesto revisa validation evidence, source reference, publisher identity, pricing y release provenance en privado. La documentación pública se detiene intencionalmente en la developer submission boundary.

Publisher validation

Las marketplace developer accounts son marketplace-only. Pueden registrarse e iniciar sesión en marketplace.attesto.eu, gestionar un publisher profile, elegir un developer tier, enviar connector assets gratuitos a private Attesto review y empezar el flujo real de developer billing para paid publishing. No pueden entrar en dashboard.attesto.eu; los tenant users normales siguen necesitando una cuenta tenant Attesto normal para el 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

Crear o actualizar un publisher profile registra marketplace evidence antes de enviar assets. Un perfil solo nunca publica un asset: free submissions son private pending review, y paid submissions requieren un paid developer tier activo más Stripe Connect readiness. Esto evita que el marketplace público sea una superficie de upload abierta.

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 se actualizan in-place. El publisher mantiene la misma cuenta marketplace-only y publisher profile. Community developers pueden enviar assets gratuitos para private review. Verified Developer, Professional Publisher y Marketplace Partner plans usan un 14-day Stripe trial y desbloquean paid connector submission solo después de que Stripe confirme la subscription. Paid listing publication además requiere Stripe Connect payout readiness. Checkout y portal URLs se crean server-side mediante el 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"
}

Publishers que quieren vender paid assets deben completar Stripe Connect payout onboarding después de que la developer account esté activa. La API usa la configuración Stripe cifrada server-side de Attesto y devuelve solo una Stripe-hosted onboarding URL. No devuelve Stripe secret keys, connected-account IDs ni 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. El backend crea la Checkout Session, aplica la Attesto application fee, enruta la parte del developer a la connected account y espera el verified Stripe webhook antes de crear el tenant entitlement y la 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

Las notificaciones Stripe refund y payout también se procesan por el endpoint verified webhook. Un full refund cierra el entitlement, revoca installs activos del conector, bloquea artifact download y registra refund y entitlement-revocation evidence. Payout events reconcilian eligible publisher ledger entries y registran payout evidence sin exponer Stripe object identifiers ni provider payloads al navegador.

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 pueden entonces enviar business connectors mediante la marketplace publisher surface. La submit action valida el manifest, registra un validation run, crea un private pending-review asset, guarda version hashes y registra marketplace evidence. Incluso cuando visibility se pide como public, el listing permanece oculto hasta que private Attesto review y publication policy están completas. Tenants no cualificados reciben una respuesta fail-closed antes de que manifest validation se ejecute.

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 y publication son procesos internos privados. Escriben marketplace evidence, pero los endpoints y procedimientos internos no forman parte de la documentación pública developer. El catálogo público solo devuelve versiones approved y non-revoked.

La source reference debe apuntar a la release source real del conector. Secrets, private keys, API tokens y customer payloads nunca deben colocarse en connector manifests.

Marketplace evidence events

Marketplace publisher profile create/update, acquisition, install, install update, entitlement revoke, paid purchase, refund, payout, publisher submission y validation/review actions escriben marketplace evidence canónica. El receipt hash se deriva del evidence envelope canónico y payload hash; el receipt record guarda tenant, actor, subject, timestamp y sanitized payload para vistas de tenant audit. Esto da a operators un audit trail determinista de quién cambió publisher identity y quién acquired, installed, updated, reviewed, published, refunded, paid out o revoked qué connector version.

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

Security boundaries