Monid signal source
Add lower-cost, curated market-data endpoints without giving campaigns an open marketplace or bypassing GTM governance.
Monid is a first-class, optional Signal V2 provider alongside Apollo. GTM Brain adopts Monid's useful
discover → inspect → run lifecycle, usage-based pricing, asynchronous runs, and workspace controls. It
does not let a production campaign dynamically discover and execute arbitrary endpoints.
Production boundary
The organization owns its sealed, workspace-scoped API key. The deployment owns the endpoint allowlist.
Paid execution runs inside a Temporal activity; accepted domain mutations use the existing
gtm.ingest_signal_v2 Fabric action. Full provider output never enters workflow history, and every result
starts as unverified_public until separately verified or corroborated.
Connect Monid
- In Monid, create an API key in the workspace GTM Brain should use.
- Open Settings → Integrations → Monid.
- Enter the key, then select Connect & test.
The connection test calls only the documented, read-only GET /v1/wallet/balance endpoint. It verifies
the workspace-scoped key and does not execute a paid endpoint. A configured account remains inactive
until the deployment has a curated binding.
Curate an endpoint
MONID_API_KEY="monid_live_..." \
pnpm --filter @repo/gtm monid:curate -- apify /approved/company-signalsThe command prints the input schema, pricing, an inspectHash, and a shadow binding template. Review
provider terms, provenance, result fields, and maximum possible charge before filling it in.
Record that review in a versioned decision document with a stable approval ID. The approval must name
the exact provider endpoints, pinned inspect hashes, input and result ceilings, permitted data classes,
retention/provenance rules, and maximum canary charge. A placeholder or invented approval ID is not an
approval. The production decision template is
docs/decisions/gtm-monid-endpoint-approval-v1.md in the repository.
[
{
"id": "company-intent",
"version": "2026-07-15.1",
"mode": "shadow",
"provider": "apify",
"endpoint": "/approved/company-signals",
"inspectHash": "sha256:<hash from monid:curate>",
"maxCostMicrodollars": 5000,
"maxResults": 10,
"legalApprovalId": "legal-review-2026-0715",
"input": { "limit": 10 },
"mapping": {
"resultPath": "items",
"companyDomain": "company.domain",
"companyName": "company.name",
"summary": "event.summary",
"occurredAt": "event.occurredAt",
"sourceId": "event.id",
"sourceUrl": "event.sourceUrl"
},
"bucket": "company",
"subtype": "databricks_adoption_expansion",
"confidence": 0.4
}
]Set the reviewed array as GTM_MONID_CURATED_ENDPOINTS_JSON. For a Databricks Asset Bundle, pass it
through monid_curated_endpoints_json. The default [] makes paid Monid runs impossible.
Shadow, canary, then active
shadow performs POST /v1/inspect, validates identity/schema/pricing, emits compact diagnostics, and
stops. It never calls the paid POST /v1/run endpoint.
An active binding is inspected again before every run. GTM Brain fails closed on identity, schema,
pricing, quoted-budget, actual-cost, provider-status, result-count, or field-mapping violations. Async
runs are polled by run ID. Because Monid does not document an idempotency key for POST /v1/run, that
paid POST is never blindly retried: V2 sensing uses a single-attempt Temporal activity. A worker failure
surfaces for operator reconciliation by run ID instead of risking a second charge.
Production deliberately excludes campaign-time discovery, tenant-supplied endpoint names or mappings, private evidence URLs, results without stable provenance, and raw payloads in Temporal history.
Next: Signals, Integrations, and Governance.