Skip to content

TapeTutor

A sleeve you can still defend if it drops. Nothing trades until you say so.

Crypto floor · Robinhood pairs

Public tape. Your book stays below.

Reading Coinpaprika, fear and greed, fees, and the dollar.

Live pipes

Your keys stay in this browser. Crypto requests are signed here, on v2 unless you switch. Plaid secrets are used for one call and not saved on our side. MCP uses Robinhood OAuth — never a password. Grok sees symbols, not keys, and only when you ask.

  1. 1. Create a key pair here, or paste a seed you already registered.
  2. 2. Robinhood on the web, classic experience, crypto API credentials. Register the public key. They return an API key.
  3. 3. Read the book first. v2 stores the account number and uses it on holdings, orders, and placements. Quote before you size. Type PLACE to send.

Grok · this sleeve

Quote, then estimate, then ask. Grok sees the symbol, the book, the bid and ask, and the fee. It drafts a market size in the asset. It cannot type PLACE.

Market on the crypto account. USD pairs with is_api_tradable only. Equities are not this API. Type PLACE. This is real.

Read the account so v2 has account_number. The order stays disabled until then.

Cancel needs the order id from Orders. Type CANCEL.

Practice book

A book with no keys.

The refusal, before a live account. This book is not yours.

Now · Read

NVDA

LOTTERY

14 sh · +18%

You can't defend this in one sentence. 'It's up' is not a thesis. Write why you still hold if it drops 12% or mark it a lottery ticket and size it like one.

Size · Cap at 3% of the book until a sentence exists. Not 18% because it ran.

Field guide

Three live pipes. One gate.

Pick the job. The button opens that pipe. The rest of this page is how to read what comes back, where each secret goes, and what to do when the status line is red. Not financial advice. PLACE is still the only way an order leaves.

Runbooks

Do this, in this order.

4 min

First crypto read

  1. Live pipes → Crypto API. Stay on v2.
  2. Create key pair. Copy the public key. It is base64 of 32 bytes, not a PEM.
  3. Robinhood on the web, classic experience, crypto API credentials. Register that public key. Paste the API key they show back here.
  4. Read the book. That is account, then holdings, then orders. The account number fills itself.
  5. Quote the pair. Estimate the fill. Neither one trades.
  6. Defend this book or Brief the book. Copy the sentence. Stop, unless you still mean an order.

2 min

A crypto order, if you still mean it

  1. Pair rules. If is_api_tradable is not true, or your size is under the minimum, change the size. Do not retry a rejected minimum.
  2. Market takes an asset quantity only. Limit, stop, and stop-limit can be coins or dollars, never both, plus the price. time in force here is gtc.
  3. Sell quantity_available_for_trading, not total_quantity. Held coins will reject.
  4. Type PLACE once. Each click builds a new client_order_id. A second click is a second order.
  5. Orders. Cancel only an id that is still open or pending, and only after you type CANCEL.

5 min

Equities, review before place

  1. Live pipes → Agentic MCP. Connect Robinhood. Desktop browser. Approve the agentic account only.
  2. Fund that account on Robinhood with money you can lose. The main account is visible and not the trading scope.
  3. Read portfolio. Tool names are whatever tools/list returned, not this page's memory.
  4. Pick review_equity_order if it is listed. Draft args. Edit the JSON. Type PLACE. Run tool. A review is not a fill.
  5. place_equity_order is a different tool and a second PLACE. Grok cannot press Run.

4 min

Read a book you will not trade from here

  1. Paste the Plaid client id and secret. Production needs the Investments product enabled.
  2. Open Plaid Link and search Robinhood. Sandbox login is user_good / pass_good / 2FA 1234.
  3. Holdings. The ticker is on the security. Quantity and institution_value are on the holding. They meet at security_id.
  4. Transactions, last 90 days, 50 rows. A chase shows up as a chase.
  5. Refresh if the numbers look stale, then read holdings again. Brief the book. Nothing in this pipe can send an order.

Before PLACE

Five lines. They do not send the order.

Tick them so you have to read them. The order button does not look at this list. Not financial advice.

Unchecked is fine. It means you are not ready to type PLACE.

Which pipe

Crypto API

You trade coins on Robinhood Crypto in the US.

Does · Account, holdings, quotes, estimates, market, limit, stop, and stop-limit.

Doesn't · Stocks, options, futures, or your main brokerage account.

Agentic MCP

You want equities, and crypto only where Robinhood already allows that agent.

Does · Read the book. Review, place, and cancel in the agentic account.

Doesn't · Touch the main account. Transfer, stake, or lend crypto. Skip PLACE.

Plaid

You want the real book and you will not place an order from here.

Does · Holdings, 90-day transactions, a refresh, or a sandbox item.

Doesn't · Orders. If a tool says it trades Robinhood equities through Plaid, it is the wrong tool.

01 · Crypto API

Sign here. v2 is the path. There is no Robinhood password on this page.

US Robinhood Crypto customers create credentials on the web, classic experience, not the phone app. Keys issued after 13 Aug 2024 look like rh-api- followed by an id. The private key is a 32-byte Ed25519 seed. This desk can create the pair. You paste the public key into Robinhood. They give you the API key. The seed never leaves this browser. About 100 requests a minute, with a short burst. The signature dies in about 30 seconds, so this desk signs on the click.

  1. Create the key pair. Copy the public key. It is standard base64 of the raw 32-byte key, not a PEM and not hex.
  2. Register that public key under crypto API credentials. Paste the API key they show, and the private seed if you did not just generate it here.
  3. Stay on v2. Read the book: account, then holdings, then orders. The account number is saved on this device and appended to the later calls.
  4. Quote, then estimate. Neither one trades. Check the pair. If the minimum is larger than your quantity, change the size.
  5. Pick market, limit, stop, or stop-limit. Market is an asset quantity. The others can be coins or dollars, never both, plus the price. Type PLACE.
  6. Cancel uses the order id from Orders and the word CANCEL. v1 is still here for an older key. It does not ask for account_number. New work belongs on v2.

Account

GET /api/v2/crypto/trading/accounts/

Buying power and account_number. Read this before anything that trades. The desk stores the number in this browser.

Holdings

GET /api/v2/crypto/trading/holdings/?account_number=

Coins you hold. v2 rejects the call without the account number. First page only.

Orders

GET /api/v2/crypto/trading/orders/?account_number=

Open and recent crypto orders. Cancel from an id the response returned.

Pairs

GET /api/v2/crypto/trading/trading_pairs/?symbol=

min size, increment, and is_api_tradable. Only USD pairs with that flag can be ordered.

Quote

GET /api/v2/crypto/marketdata/best_bid_ask/?symbol=

Bid and ask. No side effect. Do this before you think about size.

Estimate

GET /api/v2/crypto/trading/estimated_price/

side=bid|ask|both plus a quantity. v2 lives under trading, not marketdata, and can include a fee estimate.

Place

POST /api/v2/crypto/trading/orders/?account_number=

market, limit, stop_loss, or stop_limit. Blocked until you type PLACE.

Cancel

POST /api/v2/crypto/trading/orders/{id}/cancel/

Blocked until you type CANCEL. Equities are not this endpoint.

The signed string

message = apiKey + timestamp + path + method + body
timestamp = unix seconds, 10 digits
path includes the query, exactly as sent

GET  /api/v2/crypto/marketdata/best_bid_ask/?symbol=BTC-USD
body empty

GET  /api/v2/crypto/trading/holdings/?account_number=YOUR_ACCOUNT
body empty

POST /api/v2/crypto/trading/orders/?account_number=YOUR_ACCOUNT
{"client_order_id":"<uuid>","side":"buy","type":"market","symbol":"BTC-USD","market_order_config":{"asset_quantity":"0.001"}}

Headers:
x-api-key
x-timestamp
x-signature   base64 Ed25519 of the message
content-type  application/json; charset=utf-8   only when there is a body

No separators. No JSON whitespace you did not sign. A 64-byte seed is seed then public key — only the first 32 bytes sign.
Host: trading.robinhood.com
Docs: docs.robinhood.com/crypto/trading

Published signature, so you can check yours

Robinhood's published sample. v1 path. Not a key to import.

api key     rh-api-6148effc-c0b1-486c-8940-a1d099456be6
timestamp   1698708981
path        /api/v1/crypto/trading/orders/
method      POST
body        {"client_order_id":"131de903-5a9c-4260-abc1-28d562a5dcf0","side":"buy","type":"market","symbol":"BTC-USD","market_order_config":{"asset_quantity":"0.1"}}

message = those five, concatenated, nothing between them
signature   q/nEtxp/P2Or3hph3KejBqnw5o9qeuQ+hYRnB56FaHbjDsNUY9KhB1asMxohDnzdVFSD7StaTqjSd9U9HvaRAw==

v2 is the same recipe. The path gains ?account_number= before you sign.

02 · Order bodies

One config object. The type name has to match it.

A place call sends symbol, a fresh client_order_id, side buy or sell, and type. Then exactly one config. Strings, not numbers, so the signature matches the body. Prices and sizes are positive decimals. time_in_force on this desk is gtc. These shapes are examples of the wire, not a size you should use.

Market

market_order_config

{"asset_quantity":"0.001"}

Asset quantity only. Dollars are a limit, stop, or stop-limit.

Limit

limit_order_config

{"asset_quantity":"0.001","limit_price":"1.00","time_in_force":"gtc"}

Or quote_amount instead of asset_quantity. Never both. gtc.

Stop

stop_loss_order_config

{"asset_quantity":"0.001","stop_price":"1.00","time_in_force":"gtc"}

Triggers at the stop. Still one of asset_quantity or quote_amount.

Stop limit

stop_limit_order_config

{"asset_quantity":"0.001","stop_price":"1.00","limit_price":"0.99","time_in_force":"gtc"}

Stop arms it. Limit is the worst price you accept after that.

Common fields on every order: client_order_id, side, type, symbol. v2 also needs account_number on the query string, and that query is part of the signed path. Equities, options, and futures do not belong on this host.

03 · Agentic MCP

OAuth into a ring-fenced account. The rest of the book stays read-only.

The server is https://agent.robinhood.com/mcp/trading. A call without a token returns 401. This desk registers a public client, opens Robinhood login with PKCE S256, and stores the bearer in this browser. Tool names come from tools/list after you connect. The table is the beta surface to expect, not a hardcoded client. You remain responsible for every order. Robinhood says the agent can be told to trade without a second approval — this desk refuses that. Writes wait for PLACE.

  1. Connect on a desktop browser. Mobile onboarding is not the supported path. Approve only the agentic account, and fund it with money you can lose.
  2. Redirect is this origin plus /demos/robinhood. No query string. The token endpoint has no useful browser CORS, so the exchange happens on this site and the token comes straight back to your browser. It is not written to a database.
  3. Read portfolio. The bundle calls the read tools the server actually advertised.
  4. Draft args asks Grok for JSON that matches the live schema. It fills the box. It does not call the tool. Edit it. review before place.
  5. place_equity_order and cancel_equity_order stay inert until PLACE. Crypto on this pipe, if the tool exists for your account, still cannot transfer, stake, or lend, and is not offered in every state.

Handshake this desk runs

  1. POST https://agent.robinhood.com/oauth/trading/register · public client · scope internal
  2. GET https://robinhood.com/oauth · PKCE S256 · resource the MCP url
  3. POST https://api.robinhood.com/oauth2/token/ · authorization_code or refresh_token
  4. initialize protocolVersion 2025-03-26, then notifications/initialized
  5. tools/list, then tools/call · header mcp-session-id

get_accounts

Read

Every account on the login, including numbers. Only the agentic account can be traded.

get_portfolio

Read

Value and balances. Start here. This is what TapeTutor defends.

get_equity_positions

Read

Share count per name. A position without a sentence is still a lottery.

get_equity_quotes

Read

Needs symbols in the JSON. The live schema is whatever tools/list returned.

get_equity_orders

Read

What the agent already sent. Cancel is a different tool.

search

Read

Resolve a symbol before you invent one.

get_watchlists

Read

Names you watch. Watching is not holding.

review_equity_order

Draft

Simulate. Read the warnings. A review is not a fill. This desk still asks for PLACE.

place_equity_order

Trade

Real equity order in the agentic account only. Type PLACE. Fund only what you can lose.

cancel_equity_order

Trade

Cancel a pending agentic order. Type PLACE here so a slip cannot fire it.

Same URL, other clients

This desk

Connect Robinhood. Read portfolio. Pick the tool the server listed. Draft args. Edit the JSON. Type PLACE. Run tool. Grok never presses Run.

Claude Desktop

Settings → Connectors → Add custom connector. Paste https://agent.robinhood.com/mcp/trading. Authenticate on a desktop browser.

Claude Code

claude mcp add robinhood-trading --transport http https://agent.robinhood.com/mcp/trading then /mcp and authenticate.

Cursor

Give the agent the MCP link, then Settings → Cursor Settings → Tools & MCPs → Connect.

Grok

In chat, + → Add connector → Custom. Paste the same MCP link. Approve inside the window. The grant is short-lived.

ChatGPT

Settings → Developer mode → Plugins → add https://agent.robinhood.com/mcp/trading.

Codex

Settings → MCP servers → Streamable HTTP, same URL. CLI: codex mcp add robinhood-trading --url https://agent.robinhood.com/mcp/trading

Official walkthrough: robinhood.com/us/en/support/articles/agentic-trading-overview. Those clients can place a trade if you tell them to. This desk will not do it for them.

04 · Plaid

Holdings in. Transactions in. Nothing out.

Plaid Investments returns accounts, holdings, securities, and transactions. It cannot place a Robinhood order. Login happens inside Plaid Link, on Robinhood, not in a password box here. The secret is sent for that one call and is not stored on our side. The access token stays in this browser until you forget it.

  1. Paste client_id and secret. Pick sandbox, development, or production. Enable Investments on that client before production.
  2. Open Link and search Robinhood. Sandbox Link accepts user_good, pass_good, and 2FA 1234. That path needs no institution id.
  3. Holdings are POST /investments/holdings/get. Ticker lives on the security. Quantity and institution_value live on the holding. Match them on security_id.
  4. Transactions are POST /investments/transactions/get with start_date and end_date. The desk defaults to the last 90 days and asks for 50 rows. Use it to see whether a name was a planned buy or a chase.
  5. Refresh is POST /investments/refresh. It asks the institution for a new pull. Read holdings again after it settles. It still cannot trade.
  6. Create sandbox item is POST /sandbox/public_token/create, then an exchange, and only on the sandbox host. Paste the institution id from your Plaid dashboard. If that institution does not support Investments, you see Plaid's error. This desk will not invent a second id.
holding.security_id → security.security_id security.ticker_symbol + holding.quantity + holding.institution_value → the line Grok is allowed to see transaction.security_id → the same join date + type + ticker + quantity + amount → the line a brief can use POST /investments/holdings/get POST /investments/transactions/get POST /investments/refresh POST /sandbox/public_token/create sandbox only

05 · What Grok may see

A live book without a sentence is still a lottery.

Defend, Brief, and Draft args are separate clicks. They share a cap of six asks on this device, including the practice desk above. Nothing runs on load. Nothing retries in a loop.

Sent

Symbols, quantities, values, order state, the tool name, and the tool's schema. Brief may also see a scrubbed slice of the JSON.

Never sent

API key, private seed, public key, Plaid secret, access token, MCP bearer, refresh token, OAuth code. Fields with those names are dropped before the call. The server strips rh-api- and access-token shapes again.

  • Defend is four lines: Defense, Verdict, If -12%, Size. One focus name, the drop test.
  • Brief is the whole book: Book, Weakest, Cash, Refuse. It cannot place an order.
  • Draft args returns one JSON object for the tool you picked. You edit it. A write still needs PLACE, then Run tool.
  • No thesis → LOTTERY or REFUSED. 0DTE is not a strategy on any pipe.
  • Forget keys wipes this browser. On a shared computer, forget them before you leave.

What a defense looks like

Defense: You hold BTC as a reserve only if a 40% drawdown is boring. Otherwise the size is the bug.
Verdict: SIZE DOWN
If -12%: 12% is a Tuesday. If it changes your week, cut.
Size: A slice you would not check at dinner.

06 · A session

Read, then sentence, then — maybe — an order.

Not financial advice. The buttons are real once your own keys are in. The practice book above this guide is mock and needs none of them.

  1. Crypto: Read the book. If the account number did not fill, the response is in Raw and you can paste it. Quote the pair. Estimate. Only then type PLACE.
  2. MCP: Connect once. Read portfolio. Draft a review_equity_order. Read the warnings in the next response yourself. place_equity_order is a second PLACE, not a continuation.
  3. Plaid: Link, or a sandbox item if you are building. Holdings for the sentence. Transactions so a chase shows up as a chase. Refresh if the numbers look stale.
  4. Defend the focus. Brief the book if the book is the question. Copy the sentence. Close the tab or forget the keys.

07 · When it breaks

The failure is usually the signature, the account number, or the wrong account.

Read the status line on the desk before you rotate keys. The same line is explained under the pipes. Most rejects are one of these. The next move is never another Place click.

Crypto 401

The signed string was wrong or the clock slipped past about 30 seconds. Message is apiKey + unix seconds + path + method + body, with nothing between them. Path includes the query. Body is the exact JSON you send, or empty on GET.

v2 400, account_number

Holdings, orders, and place on v2 require account_number. Read the account. The desk fills the field. v1 does not ask for it, and it is the legacy path.

Market rejected dollars

market_order_config takes asset_quantity only. Switch to limit if you want to spend a dollar amount, or type the coin quantity.

Pair not tradable

trading_pairs says whether is_api_tradable is true, plus the minimum size. Fix the size. Don't retry a rejected minimum.

Browser error, no status

trading.robinhood.com does not allow browser calls. This desk signs locally and forwards the signed request. The private seed is not stored on our side.

MCP 401

The bearer expired, or the resource parameter was missing. Connect again. A refresh token in this browser is used automatically.

Popup never returns

Allow the popup, or let the same window continue. The redirect must be this exact origin plus /demos/robinhood, with no query string.

Empty agentic book

The login can see the main account and still have nothing to trade. Fund the agentic account on Robinhood. The main book stays read-only on purpose.

Crypto on MCP

Robinhood's own overview: an agent can trade crypto only if you already have a Robinhood Crypto account, only on pairs they list, and not in every state. It cannot transfer, stake, lend, or open that crypto account for you.

Plaid product error

Investments is not on that client. Enable it in the Plaid dashboard. Link retries once with Investments as an optional product. Do not fall back to a scraper.

Sandbox institution

public_token/create needs an institution id you paste. A wrong id is Plaid's error, shown as-is. Link with user_good / pass_good / 2FA 1234 does not need an id.

Grok saw a key

It should not. Defend sends symbol lines. Brief sends those lines plus a scrubbed slice that drops key, secret, token, and seed fields. Forget keys on a shared machine.

08 · Read the response

The field that matters is rarely the first number.

Raw response is the source. These are the names the official crypto docs return, plus the Plaid join. If a name is missing here, do not invent a meaning for it. First page only. This desk does not follow a cursor.

Account · v2

account_number

The id v2 appends to holdings, orders, and place. Read the account so the desk can store it. You can paste it if the parse misses.

status

Read it before any order. If the account is not in a trading status, stop. Do not keep clicking Place.

buying_power

Cash the crypto account can use, in buying_power_currency. It is not a suggestion to spend it.

is_api_tradable

Whether this account can be ordered through the API. The pair has its own flag. Both have to allow it.

fee_tier_status

Includes fee_ratio and thirty_day_volume. The fee is a cost, not a reason to trade.

Holding · v2

asset_code

The coin, not a stock ticker. Equities are not this API.

total_quantity

What you hold, including coins that are not free to sell.

quantity_available_for_trading

What a sell is allowed to use. Prefer this over total_quantity.

Order · v2

id

The only id Cancel should use. Copy it from this response.

client_order_id

Your idempotency key. This desk mints a new one on every Place click, so a double click is not a retry.

state

open, pending, filled, canceled, or failed. Cancel an open or pending id. A filled id is already done.

average_price

What filled, when it filled. Not the quote you saw before you clicked.

filled_asset_quantity

How much actually filled. Compare it to the quantity you sent.

executions

effective_price, quantity, and timestamp for each fill.

fee_charged

Fee already taken. estimated_fee_remaining is not a fill.

Quote and estimate · v2

bid / ask

Best bid and ask. A buy looks at the ask. The desk's estimate uses ask for a buy and bid for a sell.

est_fee

Fee estimate on that quantity. est_total_cost is a buy. est_total_credit is a sell. Neither one is a last trade.

Plaid

security_id

The join key. Holdings and transactions point at it. The ticker lives on the security, not the holding.

ticker_symbol

What Defend and Brief are allowed to see, with quantity and value.

institution_value

The institution's value for that holding. Not a bid, and not an order.

quantity

Shares or units on the holding. On a transaction it is the amount that moved, beside date, type, and amount.

09 · Where it goes

The seed stays. The signature travels once.

Forget keys deletes this browser's copy. We do not keep another. A shared computer should forget them before you leave.

Private seed

This browser. It signs the request.

Never sent. Not to Robinhood as a header, not to Grok, not written on our side.

API key, timestamp, signature, path, body

This browser, then one forward.

Our server adds the headers and calls trading.robinhood.com. It does not write them to a database.

Plaid client id and secret

This browser until you forget them.

Sent for that one Plaid call. Not stored on our side.

Plaid access token

This browser.

Sent only when you read holdings, transactions, or refresh.

OAuth code

The redirect, then one exchange.

Swapped at api.robinhood.com for a bearer. The bearer comes back to this browser and is not stored on our side.

MCP bearer

This browser.

Your browser calls agent.robinhood.com directly. Tool calls do not go through us.

Grok

Nothing, until you click Defend, Brief, or Draft args.

Symbols, quantities, and a scrubbed slice. Keys, seeds, secrets, and tokens are dropped. Six asks on this device.

10 · Build the same pipe

Steal the contract. Do not steal a session.

This is the wedge: a sentence on a real book, official pipes only, a human gate on every write. The calls below are what this desk will actually do.

Host

https://trading.robinhood.com — crypto only. Sign on the client. Forward the signed request. Do not put the seed on a server you do not control.

Message

apiKey + unix seconds + path + METHOD + body. Path includes the query. Body is the exact JSON, or empty. No separators. v2 puts account_number in that path before you sign.

Headers

x-api-key, x-timestamp, x-signature. content-type application/json; charset=utf-8 only when there is a body. The signature is valid for about 30 seconds.

v2 place

POST /api/v2/crypto/trading/orders/?account_number= with one of market, limit, stop_loss, stop_limit. Exactly one config object. Strings, not numbers. Market is asset_quantity only.

MCP

https://agent.robinhood.com/mcp/trading. Public client, scope internal, PKCE S256, resource set to that URL. Redirect must be this origin plus /demos/robinhood with the query stripped.

Token

POST https://api.robinhood.com/oauth2/token/ has no useful browser CORS. Exchange on a server, return the token to the browser, do not persist it.

Session

initialize with protocolVersion 2025-03-26, then notifications/initialized, then tools/list. Send mcp-session-id on the next calls. Trust the list, not a hardcoded tool name.

Plaid

products investments. If the client lacks it, retry Link once with transactions plus Investments as optional. Holdings join on security_id. Sandbox public_token only when the user supplies the institution id.

Do not build

A Robinhood password field. An unofficial mobile client. An auto-place loop. A Grok call on page load. A database row for any of these secrets.

11 · Glossary

The words the status line assumes you know.

Look them up from the search at the top. The definition is the next click, not a textbook.

account_number

The crypto account id v2 requires on holdings, orders, and place. It is not your login.

Agentic account

The ring-fenced Robinhood account an MCP agent is allowed to trade. Your main brokerage account is read-only on that pipe.

buying_power

Cash available in the crypto account. Sitting in cash is allowed.

client_order_id

A UUID you mint so Robinhood can tell one order from a retry. A new UUID means a new order.

Ed25519

The signature scheme. The private half is a 32-byte seed. A 64-byte blob is seed then public key. Sign with the first 32.

gtc

Good till canceled. The only time in force this desk sends on limit and stop orders.

is_api_tradable

The flag on a USD pair, and on the account, that says the API may order it.

institution_value

Plaid's reported value of a holding. Read-only. It cannot be sold from this desk.

PKCE

The proof that the browser which started login is the one exchanging the code. S256. The verifier never goes in the authorize URL.

PLACE / CANCEL

The words that arm a write. The button stays off until they match. They are not a recommendation.

security_id

Plaid's id for a security. Join holdings and transactions to securities on it to get the ticker.

tools/list

The MCP call that returns the real tool names and schemas. Anything printed before you connect is a beta expectation, not a promise.

  1. 01Gate every name with one sentence. No sentence, no size.
  2. 02Refuse 0DTE as a strategy. Entertainment budget only.
  3. 03A 12% drop test before the red day, not after.
  4. 04Official pipes only: paste, Plaid, Crypto API, Agentic MCP.
  5. 05Never collect a Robinhood password. Never unofficial mobile APIs.
  6. 06Practice book is mock. Live pipes use your keys in this browser only.
  7. 07Not financial advice. An order is real only after you type PLACE or CANCEL.