Data Ingestion API

Bring your own data. Sharpen every ranking.

Push your items, users, and engagement events into Embed through the Data Sources API. They become searchable, rankable, and notifiable right next to everything we already index — and personalization gets sharper with every event you send.

console.mbd.xyz/data-sourcesprovisioning…
Data source
embed-ingestion-datasource
id: datasource-d0d5c126-37fa
Ingestion endpoints
POST /datasources/{id}/items
POST /datasources/{id}/users
POST /datasources/{id}/items/interactions
POST /datasources/{id}/users/interactions
curl -X POST …/items/interactions
{ "item_id": "polymarket.mkt-812",
"user_id": "wallet.0xdemo01",
"event_type": "like" }
→ 200 OK · queued to stream
Browse · your data
user_idprotocolevent
polymarket.0xe22…310f59polymarketlike
superfeeds.demofarcasterview
wallet.0xdemo01walletbookmark
3 streams
items, users, interactions
1 call
provisions a managed stream
5 events
view, like, comment, share, bookmark
50 tags
per item, plus language metadata
How it works

Provision. Push. Personalize.

01
Provision

One request creates a data source under your account and provisions a managed ingestion stream — you get back an ID and an active status, not an infrastructure project.

02
Push

Send items, users, and engagement events as JSON. IDs are namespaced by protocol, events can come from logged-in users or anonymous sessions, and rate-limit headers keep your pipeline honest.

03
Use everywhere

Ingested data lands next to everything Embed already indexes. Search it, boost with it, and join it into feed and notification algorithms with one DSL call.

Three streams

What you can send

items
Your content

Posts, articles, and media with tags, language, and publication type — everything the engine needs to rank your catalog alongside live onchain data.

users
Your audience

Profiles from your app and their identities across social protocols, so algorithms can target exactly the users you serve.

interactions
Your engagement

Views, likes, comments, shares, and bookmarks — attributed to a user or an anonymous session. This is the signal that sharpens personalization over time.

Two calls in, one call out

Ingest with REST, use it in the DSL

Ingestion is plain JSON over REST. Once your data is in, every algorithm — feeds, search, notifications — can filter by your events and join against your audience.

Ingest · REST
POST /v3/datasources
{ "name": "my-app-events" }
// -> {
// "datasource_id":
// "datasource-e07d2ec0-643a",
// "status": "active"
// }
POST /v3/datasources/{id}/items/interactions
{ "item_id": "myapp.post-812",
"user_id": "myapp.u-4410",
"event_type": "like" }
Use it · Studio DSL
// In any feed, search, or
// notification algorithm:
const candidates = await mbd.search()
.index("polymarket-items")
.include()
.userInteraction("event_type", "like")
.inAppUsers("wallet_address")
.execute()
Personalization that compounds

Onchain history tells us what a wallet trades; your engagement events tell us what your users actually do in your app. Feed both in and every ranked surface — feeds, search, notifications — gets more relevant with use.

Scoped to your account

Ingested data is account-owned. Your items, users, and events power your algorithms — joined in with account-scoped filters, not mixed into anyone else’s results.

Your data is the moat. Use it.

Provision a data source in one call, push your first events today, and watch every ranked surface in your app get sharper.