Documentation

The OptiLearn docs. Camera to settlement, on one page.

How bounties, review, payouts and provenance work, what to capture and how, and the public API. Written for contributors and for the labs that license the data.

Settles on
Robinhood ChainChain ID 4663
Paid in
35 stock tokensPriced by Chainlink
Provenance
OP MainnetEAS attestations
Review
A person, every timeUsually inside a day
Data types
Five modalitiesVideo, audio, image, text, sensor
Contributor fees
NonePayout gas is covered

Overview. What OptiLearn is.

OptiLearn is a data marketplace for AI and robotics. People film everyday tasks from their own point of view, or upload audio, photos, written procedures and phone sensor logs, and AI labs license the result.

Robots learn to manipulate the world by watching it being done, and first-person footage of real work barely exists at scale. OptiLearn posts bounties for the specific data labs are asking for. A person reviews every submission against a published capture standard. Approved work is paid in tokenized stock on Robinhood Chain, and each approved contribution gets an attestation on OP Mainnet so a buyer can check where every file came from.

Contributors

Film or upload against an open bounty, pass human review, and choose which stock token the reward is paid in. No fee and nothing to fund.

AI labs

License reviewed, consented datasets for manipulation, perception and planning, with a provenance record for every item.

The network

Rewards settle on Robinhood Chain. Provenance is attested on OP Mainnet. $LEARN is the network token.

Powered by Optimism. Provenance lives on OP Mainnet through the Ethereum Attestation Service, so it is public, permanent and independent of OptiLearn's own servers.

How it works. Four steps, camera to settlement.

Every submission follows the same path. Nothing moves to the next step without a person looking at it.

  1. 1
    Connect a wallet or paste an address
    Sign in with a wallet, or with email and we create a wallet for you through Privy. You can also paste any EVM address. That address is where rewards are sent. There is no password to set and nothing to fund.
  2. 2
    Pick a bounty and capture
    Choose an open bounty, read its brief, then record in the browser or upload a file you already made. One task per submission, filmed or recorded by you.
  3. 3
    Human review
    A reviewer checks the submission against the capture standard and the bounty brief, gives it a score, and sets a reward in US dollars inside the bounty's range. This usually happens inside a day.
  4. 4
    Settlement and attestation
    The dollar reward is converted into the stock token you picked at the Chainlink price and sent to your address on Robinhood Chain, after a person checks the payout. The contribution is attested on OP Mainnet. Track every step in Portfolio.

Bounties and how they become datasets.

A bounty is an open request for one kind of data, written against a real buyer need. Pick one, follow its brief, get paid when it clears review.

Each bounty has a brief, an accepted length, a pay range in US dollars and a target count. It feeds exactly one dataset in the marketplace, and it closes when the dataset has the approved items it needs. There are 17 bounties open across video, audio, images, text and sensor logs.

Tiers

The same review applies across the range. What changes is how hard the task is to capture well, and what it pays.

  • T1Household
    What it covers
    Everyday tasks in your own home
    Length
    5–60 s
    Pay per item
    $2–$4
  • T2Care and outdoors
    What it covers
    Hands-on work with living things
    Length
    10–60 s
    Pay per item
    $4–$7
  • T3Skilled trades
    What it covers
    Tool use with a real outcome
    Length
    15–60 s
    Pay per item
    $8–$15

Video lengths above are for video bounties. Audio, image, text and sensor bounties carry a tier too, with their own length rules and pay range shown on each bounty page. The exact reward is set at review, inside the range.

From bounty to dataset

Every approved item lands in one dataset. This is the full map as it stands today.

Capture standard. One sheet, eight lines.

This is exactly what review checks. Submissions that meet it clear first time; the ones that miss a line are the only ones that come back.

  1. 01Framing
    First person, camera held or worn at eye level, both hands in frame for the whole task.Photos: the object fills most of the frame, on a plain surface.
  2. 02Duration
    One task per submission, inside the bounty’s length range. Video runs 5 to 60 seconds.Audio 10 to 120 s. Sensor logs 30 to 300 s. Text 150 to 600 words.
  3. 03Resolution
    1080p or better, 30 fps or better.Photos 2000 px on the short edge. Audio 44.1 kHz. Sensors 50 Hz or faster.
  4. 04Lighting
    Even enough that hands, tools and the object stay readable from start to finish.Audio: no clipping, no music, and no speech unless the brief asks for it.
  5. 05Subjects
    Your own space. No other people, faces, screens or documents in shot.Text: no names, addresses or personal details of anyone, including you.
  6. 06Audio
    Optional on video. It is stripped before a clip enters a dataset.On audio bounties the recording is the data, so keep voices out.
  7. 07Format
    Straight from the device. No edits, filters, speed changes or overlays.Accepted files and size limits are listed under Data types.
  8. 08Review
    Checked by a person against this sheet and the bounty brief.Scored 0 to 100. The score sets where the reward lands in the range.

Data types. Five modalities, one review.

Upload the original file from the device that made it. Anything outside these formats or limits is rejected at upload, before it reaches review.

  • Video
    Formats
    MP4, MOV
    Max size
    300 MB
    Notes
    As recorded. In-browser recordings arrive as WebM, which is also accepted.
  • Audio
    Formats
    WAV, M4A, MP3
    Max size
    100 MB
    Notes
    44.1 kHz or better. WAV preferred; FLAC, OGG and WebM also accepted.
  • Image
    Formats
    JPG, PNG, HEIC
    Max size
    25 MB
    Notes
    Per file, or one .zip for a multi-angle set. WebP also accepted.
  • Text
    Formats
    TXT, MD
    Max size
    2 MB
    Notes
    UTF-8. Plain steps in your own words, 150 to 600 words.
  • Sensor
    Formats
    CSV, JSON
    Max size
    50 MB
    Notes
    Timestamped rows, one sample per row, units stated.

Sensor logs

Export accelerometer and gyroscope readings from any logging app. Put a header row first, time in milliseconds from the start in the first column, acceleration in m/s² and rotation in rad/s. JSON uploads should be an array of objects with the same keys.

motion-log.csv
t_ms,ax,ay,az,gx,gy,gz
0,0.118,-9.793,0.342,0.002,-0.011,0.004
10,0.121,-9.801,0.337,0.003,-0.010,0.004
20,0.164,-9.786,0.351,0.019,-0.008,0.006

The file type is checked twice, by extension and by its contents, and every file is fingerprinted with SHA-256 on upload. Resubmitting a file that is already in review or approved is refused as a duplicate.

Review. A person, every time.

Every submission is watched, listened to or read in full by a person on the OptiLearn team before anything is paid.

What a reviewer checks

  • The brief. It shows the task the bounty asked for, from start to finish, and only that task.
  • The standard. Each of the eight lines in the capture standard, in order.
  • Originality. You made it, recently, and it has not been submitted before by you or anyone else.
  • Consent. The consent box was ticked for this submission and the file matches what was described.

What gets rejected

  • Other people's faces or voices, or anything showing screens, mail, ID cards or addresses.
  • Edited, filtered, sped up, stitched or screen-recorded files.
  • Footage you did not record yourself, including anything downloaded or AI generated.
  • Duplicates and near duplicates of earlier submissions.
  • Hands or the object out of frame for most of the task, or too dark or shaky to follow.
  • A different task from the one the bounty describes.

Status and turnaround

Review usually happens inside a day. A busy queue can push it further, never silently: the status is always visible in Portfolio.

PendingApprovedPaid
PendingRejectedwith a note saying what to fix

Scores and rewards

Each approved submission gets a score from 0 to 100, and the score decides where the reward lands inside the bounty's range. A Folding laundry clip that scores 90 in a $2 to $4 bounty earns close to $4. A rejected submission can be recorded again and resubmitted; the reviewer note tells you what to change.

Settlement. Dollars in, stock out.

Rewards are set in US dollars at review, then paid in the stock token you chose, at its Chainlink price on Robinhood Chain.

Reward set at review
Paid in
Reward
$6.00
NVDA Chainlink price
You receive
Sent to your address on chain 4663
tokens = reward_usd / price_usd…
  • Priced by Chainlink. The price comes from the stock's Chainlink feed on Robinhood Chain when the payout is prepared. When the market is closed the feed holds its last price, and that price is used.
  • Checked by a person. A person checks the amount, the token and the address before any payout is signed. Nothing is sent automatically.
  • Chosen per submission. You pick the payout stock when you submit. Different submissions can pay out in different stocks.
  • Gas is on us. OptiLearn pays the network fee. You need nothing in your wallet to receive.

Payouts go out by hand in batches after approval. Until the transaction is sent, Portfolio shows the submission as approved; once it lands you get the transaction link on the explorer.

Robinhood Chain

Network
Robinhood Chain mainnet, an Arbitrum Orbit L2
Chain ID
4663 (0x1237)
RPC
https://rpc.mainnet.chain.robinhood.com
Gas token
ETH
Price source
Chainlink data feeds, read on chain

Payout stocks

Any of these 35 stock and ETF tokens can be chosen as a payout. Each one has a live Chainlink feed on Robinhood Chain, which is what makes a fair conversion possible.

Attestations. Provenance on OP Mainnet.

Every approved contribution is attested on OP Mainnet through the Ethereum Attestation Service when its payout is recorded. The attestation says who contributed what, for which bounty, and the file's fingerprint, without putting the file or any personal data on chain.

OP Mainnet, chain 10EAS is an OP Stack predeploy, at the same address on every OP chain.

The schema

Each attestation is made against this schema with no resolver. The recipient is the contributor's address, so every attestation also shows up under that wallet on the explorer. The schema UID is the keccak256 of the schema string, resolver and revocable flag; the Network page shows whether it is registered.

Contribution schema
bytes32 submissionId,address contributor,string modality,string bounty,bytes32 contentHash,uint16 reviewScore,string payoutSymbol
  • submissionIdbytes32
    Meaning
    The submission's ID, the same one shown in Portfolio.
  • contributoraddress
    Meaning
    The wallet that made the submission and received the reward.
  • modalitystring
    Meaning
    video, audio, image, text or sensor.
  • bountystring
    Meaning
    The bounty slug, for example fold-laundry.
  • contentHashbytes32
    Meaning
    SHA-256 of the original upload, before any processing. Anyone holding that file can recompute it.
  • reviewScoreuint16
    Meaning
    The reviewer's score, 0 to 100.
  • payoutSymbolstring
    Meaning
    The stock token the reward was paid in, for example NVDA.

What stays off chain

The file itself, your email, your IP hash, the reviewer's notes and the dollar value of the reward are never written to an attestation. Attestations are public and permanent: they cannot be deleted, only revoked, and a revoked attestation stays visible with its revocation time.

How a buyer verifies a file

  1. 1
    Find the attestation
    Every item in a licensed dataset carries its attestation UID in the manifest.
  2. 2
    Read it on OP Mainnet
    Open it on easscan, or call getAttestation(uid) on the EAS contract directly.
  3. 3
    Check who signed it
    The attester must be the OptiLearn attester address listed in your license, and the revocation time must be zero.
  4. 4
    Match the fingerprints
    contentHash must equal the item's source_sha256, the hash of the original upload. The file you received hashes to sha256; the two differ only when audio or metadata was stripped before delivery.
verify.ts, viem + Node
import { createPublicClient, http, parseAbi, decodeAbiParameters, parseAbiParameters } from "viem";
import { optimism } from "viem/chains";
import { createHash } from "node:crypto";
import { readFileSync } from "node:fs";

const row = JSON.parse(manifestLine); // one line of manifest.jsonl
const ATTESTER = "0x…"; // OptiLearn attester, listed in your license
const EAS = "0x4200000000000000000000000000000000000021";

const abi = parseAbi([
  "function getAttestation(bytes32 uid) view returns ((bytes32 uid, bytes32 schema, uint64 time, uint64 expirationTime, uint64 revocationTime, bytes32 refUID, address recipient, address attester, bool revocable, bytes data))",
]);
const client = createPublicClient({ chain: optimism, transport: http() });
const att = await client.readContract({ address: EAS, abi, functionName: "getAttestation", args: [row.attestation.uid] });

const [, , , , contentHash] = decodeAbiParameters(
  parseAbiParameters("bytes32, address, string, string, bytes32, uint16, string"),
  att.data,
);
const sha = (f) => "0x" + createHash("sha256").update(readFileSync(f)).digest("hex");

const ok =
  att.revocationTime === 0n &&
  att.attester.toLowerCase() === ATTESTER.toLowerCase() &&
  contentHash === row.source_sha256 && // what was reviewed
  sha(row.file) === row.sha256; // what you received
console.log(ok ? "verified" : "does not match");

$LEARN. The network token.

$LEARN is OptiLearn's network token on Robinhood Chain. The price and contract below are live.

$LEARNRobinhood Chain, chain 4663
Market cap
Liquidity
Volume 24h
  • Not how rewards are paid. Contributor rewards are paid in stock tokens. $LEARN is separate.
  • Not required. You do not need to hold $LEARN to contribute, get paid or license data.
  • No promises. We make no promises about its price, supply or future use. If that changes, it will be written here before it happens.

The same data is available from GET /api/learn. Buying or holding any token carries risk and nothing on this site is investment advice.

For buyers. Licensing and delivery.

Datasets are licensed, not sold. Choose a scope, review sample records, then receive the full set with a manifest that ties every file to its consent record and attestation.

Licenses

  • Research
    What it allows
    Train and evaluate models for internal research and publication. Not for use in a commercial product.
    Typical buyer
    Academic groups, evaluation sets, early exploration
  • Commercial
    What it allows
    Train, fine-tune and ship models in commercial products. Non-exclusive. Raw files cannot be resold or redistributed.
    Typical buyer
    Product teams training production policies
  • Exclusive
    What it allows
    Commercial rights plus exclusive access to the dataset, including new items from its bounties, for an agreed window.
    Typical buyer
    Labs that want a collection no one else has

Each dataset page shows the license it is offered under and a starting price. Volume and exclusivity move the price; the final terms are in the license you sign.

Delivery

  • Files. Video as MP4 with the audio track removed, audio as WAV, images in their original format, text as UTF-8 Markdown, sensor logs as CSV.
  • Manifest. One JSON line per item with capture details, annotations, the consent record, both file hashes and the attestation UID.
  • Transfer. Delivered into your S3 or R2 bucket. Sample records are shared before you sign.
  • Refreshes. Datasets that are still collecting ship a new manifest as items clear review. Item IDs never change between refreshes.
manifest.jsonl
{
  "id": "4f1c9a2e-7b3d-4e21-a8c5-1d93e07b6f42",
  "file": "clips/4f1c9a2e.mp4",
  "sha256": "0x3b7e…91c4",
  "source_sha256": "0x9d02…4ae8",
  "contributor": "sha256:5c81e0a2…7f13",
  "task": "fold-laundry",
  "captured_at": "2026-08-14T10:32:00Z",
  "country": "BR",
  "duration_sec": 34.2,
  "resolution": "1920x1080",
  "fps": 30,
  "audio": "stripped",
  "annotations": {
    "task_label": "fold_laundry",
    "hand_visibility": 0.94,
    "segment": [12, 1018],
    "objects": ["t-shirt", "towel", "basket"]
  },
  "consent": { "recorded": true, "version": "2026-06", "at": "2026-08-14T10:32:00Z" },
  "attestation": { "chain_id": 10, "uid": "0x8a4f…e2d0" }
}

API. The endpoints behind this site.

Everything on OptiLearn reads from these public JSON endpoints, and you can too. No key is needed.

Base URL
https://optilearn.ai
  • Format. JSON in and out, UTF-8. Responses are not cached unless noted.
  • Errors. A non-2xx status with { "error": "bad_request", "message": "…" }. The message is written to be shown to people.
  • Limits. Writes are rate limited per network and return 429 with a Retry-After header. Poll reads every 30 seconds or slower; prices do not change faster than that.

Every tokenized stock and ETF on Robinhood Chain with a live Chainlink feed, plus ETH and BTC reference prices, the latest block and gas. Read through Multicall3 and cached for 45 seconds. state is live when the feed updated within its normal window and held when the market is closed and the last price stands. Stale feeds are left out.

Request
curl -s https://optilearn.ai/api/ticker
Response200
{
  "quotes": [
    {
      "symbol": "NVDA",
      "name": "NVIDIA",
      "kind": "stock",
      "address": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",
      "feed": "0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F15",
      "price": 225.66018707,
      "updatedAt": 1790366165,
      "state": "held"
    }
  ],
  "block": 74069201,
  "gasGwei": 0.020218,
  "at": 1790525258207
}

The $LEARN contract and market data. Until the contract is published every field except symbol and updatedAt is null, which is what it returns today. change24h is a percentage and updatedAt is in milliseconds.

Request
curl -s https://optilearn.ai/api/learn
Response200
{
  "address": null,
  "symbol": "LEARN",
  "priceUsd": null,
  "change24h": null,
  "marketCap": null,
  "liquidityUsd": null,
  "volume24h": null,
  "url": null,
  "source": null,
  "updatedAt": 1790526092927
}

Settings the operator can change without a redeploy: the $LEARN contract and pool, and the X handle. Writes need an operator token and are not public.

Request
curl -s https://optilearn.ai/api/config
Response200
{
  "learnAddress": null,
  "learnPool": null,
  "xHandle": "gkimbwala",
  "updatedAt": null
}

Live status for both chains in the loop. Each chain degrades on its own: if one RPC is down it comes back with "ok": false and nulls while the other still reports. Cached for 10 seconds.

Some fields are trimmed above for length; the live response also repeats each chain's RPC, explorer and block time.

Request
curl -s https://optilearn.ai/api/network
Response200
{
  "robinhood": {
    "name": "Robinhood Chain",
    "chainId": 4663,
    "rpc": "https://rpc.mainnet.chain.robinhood.com",
    "explorer": "https://robinhoodchain.blockscout.com",
    "ok": true,
    "block": 74077518,
    "blockTime": 1790526092,
    "blockAgeSec": 1,
    "avgBlockTimeSec": 0.1,
    "gasGwei": 0.020086
  },
  "optimism": {
    "name": "OP Mainnet",
    "chainId": 10,
    "ok": true,
    "block": 157463658,
    "avgBlockTimeSec": 2,
    "gasGwei": 0.001000409,
    "eas": {
      "address": "0x4200000000000000000000000000000000000021",
      "schemaRegistry": "0x4200000000000000000000000000000000000020",
      "schemaUid": null,
      "schemaRegistered": false,
      "attestations": 1318576
    }
  },
  "feeds": { "total": 38, "live": 0, "held": 38 },
  "at": 1790526093796
}

Platform totals, with per-bounty counts keyed by bounty slug. Cached for 60 seconds. It never fails: if the database is unreachable it returns zeros.

Request
curl -s https://optilearn.ai/api/stats
Response200
{
  "submissions": 42,
  "approved": 31,
  "contributors": 17,
  "paidUsd": 118.5,
  "byBounty": {
    "fold-laundry": { "submitted": 12, "approved": 9 }
  }
}

Every submission made from a wallet, newest first, up to 100. Storage keys, IP hashes and file contents are never included. Returns 400 for an invalid address and 503 if the database is unreachable.

walletaddressrequired
Any EVM address, checksummed or lower case.
Request
curl -s "https://optilearn.ai/api/submissions?wallet=0x7a3f…c21e"
Response200
{
  "submissions": [
    {
      "id": "4f1c9a2e-7b3d-4e21-a8c5-1d93e07b6f42",
      "wallet": "0x7a3f…c21e",
      "bountySlug": "fold-laundry",
      "modality": "video",
      "title": "Folding laundry",
      "fileName": "IMG_4821.MOV",
      "fileSize": 48213771,
      "mime": "video/quicktime",
      "durationSec": 34.2,
      "captureSource": "upload",
      "payoutSymbol": "NVDA",
      "status": "paid",
      "reviewScore": 88,
      "rewardUsd": 3.75,
      "reviewerNote": null,
      "payoutAmount": 0.016618,
      "payoutPriceUsd": 225.66,
      "payoutTx": "0x51be…09aa",
      "attestationUid": "0x8a4f…e2d0",
      "createdAt": "2026-09-26T14:02:11.000Z",
      "reviewedAt": "2026-09-26T19:40:05.000Z",
      "paidAt": "2026-09-27T09:12:48.000Z"
    }
  ]
}

Sends a licensing inquiry, the same one the form on /buyers sends. Validation errors come back as 400 with a message per field. Limited to 5 per hour per network.

namestringrequired
2 to 120 characters.
emailstringrequired
A work email.
orgstringrequired
Your lab or company, 2 to 160 characters.
useCasestringrequired
What you are training, at least 20 characters.
rolestring
Optional, up to 120 characters.
datasetsstring[]
Dataset slugs from the marketplace, for example household-manipulation.
budgetenum
under-10k, 10k-50k, 50k-250k, 250k-plus or unsure.
Request
curl -s -X POST https://optilearn.ai/api/inquiries \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada Lovelace","email":"ada@lab.ai","org":"Analytical Robotics","useCase":"Bimanual folding policy, 2k clips to start","datasets":["household-manipulation"],"budget":"10k-50k"}'
Response201
{
  "ok": true,
  "id": "b2e0d6c4-3f1a-4c7e-9a52-6e8d1f0c7a31"
}

FAQ. Before you start.

The data you record is what makes the models work, so the people producing it should hold some of the upside rather than a one-time fee. Rewards are set in dollars and paid in a stock token you choose. Tokenized stock can fall as well as rise.
You need an address, not experience. Sign in with email and a wallet is created for you, connect one you already have, or paste any EVM address. There is nothing to fund, because payments only ever move toward you and OptiLearn pays the gas.
Any of the 35 stock and ETF tokens with a live Chainlink feed on Robinhood Chain, including NVDA, TSLA, AAPL, MSFT and SPY. You pick one per submission. The full list is under Settlement.
Usually inside a day. Every submission is reviewed by a person, so a busy queue can take longer. You can follow the status of each one in Portfolio.
The reviewer note says which line of the capture standard it missed. The most common reasons are another person in shot, hands out of frame, and a task that does not match the brief. Fix it, record again and resubmit.
Approved submissions become training data licensed to AI and robotics teams. Audio is stripped from video and location metadata is removed before delivery. Rejected files are deleted. Read the privacy policy for the full picture.
Yes. Email hello@optilearn.ai with the submission ID and your wallet address. We remove the file from storage and from future deliveries. The onchain attestation stays, because it cannot be erased, but it holds only a hash, never the file.
No. Contributing is free, OptiLearn pays the network fees for payouts, and you keep the full reward.
Anyone 18 or older who can legally receive tokenized stock where they live, filming only their own space. Stock tokens are not available in every country; see eligibility before you start.
No. $LEARN is the network token and has nothing to do with how you are paid. See $LEARN for the live contract.

Still stuck? Contact us.