Considering Alpaca Elite - have questions

I currently have Alpaca Pro and am on the threshold of the $30k requirement to get Alpaca Elite. However, most everything I’m seeing is either marketing blabber or I’m just not familiar enough with the behind-the-scenes stuff to understand it.

Basically, I place up to a couple hundred ‘portfolio’ API calls a minute (during high volume trading and have bounced off of the rumored 200 call/min limit on portfolio inquiries) and probably up to a thousand or so hits on the “https://data.alpaca.markets/v2/stocks/” endpoint a minute during peak hours.

Basically, I have a couple questions on Alpaca Elite:

  • Will it reduce the slippage significantly? My strategy includes placing and then updating said placed stop limit order as the stock evolves. I’ve seen some pretty insane slippage on my placed SL order before on fairly heavily traded stocks (like a stock with hundreds of thousands of volume within the last minute will slip by up to 8% before getting filled is the max I’ve seen), which is pretty frustrating. If there isn’t a middle-man, would my stop limit be executed properly with significantly less slippage (assuming I’m not placing super large orders relative to the current market volume)?
  • Will it be cheaper or more expensive than Alpaca Pro? I really can’t seem to get a solid grasp on what charge is what compared to Alpaca Pro. A ‘compare’ tool would be cool.
  • Can I PLEASE get visibility to rejected orders??? I’ve baked in some logic to ‘guess’ why a order may be rejected prior to placing, but I still get ‘rejected’ orders now and then. Usually, it will recover (seemingly just a random ‘identical’ order will stick), but I want to know why so I can add logic to that appropriately.
  • What are the actual API limits? I see the “Elite Smart Router” (I assume is synonymous vs the “Alpaca Elite” tier) says “1000 calls/minutes” BUT what type of API call is that? Portfolio or historical market data? I’ve slowly been reworking my algo to not hit the portfolio endpoints quite as much so I can leverage the 10,000 calls/min limit on historical market data and not hit API rate limits, but I just want to know what I’m working with and the advertisement page is not clear.

Maybe I’m being a block-head, but I have to be making this more difficult that it actually is or I’m just doing a solid derp today. Could anyone share some thoughts on the above questions?

I don’t have many answers for you, but I’m wondering if those data calls are requests for data or order updates. If they are requests for data, seems like you’d be better off hitting the streaming endpoints and just letting the data updates come to you regularly.

So, the Alpaca basic definition of “X tier gets X number of X type of API calls” is simply……nowhere (which is dumb). I’ve more or less extrapolated that the Pro tier gets 10,000 “historical” API calls / min (like getting the price) and 200 “portfolio” API calls / min (like checking the balance of my portfolio, checking the current orders, updating new orders, etc. Someone please correct me if I’m wrong (or send me to just a very basic documentation page that I shouldn’t have had any excuse to miss by now), but I think I’m hitting the 200/min portfolio requests. I’d thought of a websocket to get the current price, but that would require a bunch of retooling (mostly because I haven’t done websockets before) and 10,000 “what was the last price” queries a second should be MORE than plenty for my use case.

I highly recommend streaming the data in any case where it’s possible. I get not wanting to retool…if that were me, I’d just have AI do it for me.

@kcducttaper I can perhaps help answer some of your questions. The first thing to realize is there are two order handling plans. The “commission-free” plan and the “smart router” plan. There are details here. Scroll down to the yellow “See More” button, then click it to reveal a chart that highlights the details of each.

Will it [the smart router plan] reduce the slippage significantly?

The smart router plan will generally provide better fill prices. However, this may or may not translate to net overall improvement due to commissions. The commission-free plan will generally see fill prices at the NBBO quote. Buy orders typically fill at the ask price and sell orders typically fill at the bid price (there really isn’t any ‘slippage’ from the quote). While fill prices can improve when using the smart router plan, it’s not guaranteed and depends heavily on the order profile. Low-priced symbols with small bid-ask spreads won’t see as much price improvement as symbols with larger bid-ask spreads. A major driver for traders to select the smart router plan is for the added advanced order types, and not necessarily price improvement.

I’ve seen some pretty insane slippage on my placed SL order before on fairly heavily traded stocks (like a stock with hundreds of thousands of volume within the last minute will slip by up to 8% before getting filled is the max I’ve seen)

If you define “slippage” as the difference between the last traded price and the price at which an order fills, then that mostly depends on volatility and is independent of how the order is executed. The last traded price is something that happened in the past and is an order that may or may not look anything like your current order. Fundamentally, orders typically fill at the current quote. There will be virtually zero “slippage” when compared to the current quote. If you are seeing a lot of “slippage” from the last traded price, it simply indicates high price volatility and/or a large bid-ask spread. It is not an indication of execution.

Will it [smart router] be cheaper or more expensive than Alpaca Pro?

That entirely depends upon one’s order profile. If trading symbols with low bid-ask spreads, then any savings from the smart router plan may be negligible. As a starting point, assume a 25% spread price improvement. Take for example TSLA. The current ask and bid are $345.94 and $345.91, respectively. If selling, a 25% spread price improvement would be (345.94-345.91) * .25 = $0.0075. In other words, one would expect to sell at $345.91 using the commission-free model, but it may improve to $345.9175. However, subtracting the $.004/share commission, it would net $345.9135 with the smart router. As a percentage, about a 0.001% improvement.

Can I PLEASE get visibility to rejected orders?

If an order is rejected when placed, a text description of the error will be included in the API response. As an example, using the python alpaca-py SDK, one could print these errors something like this:

try:
  my_order = trading_client.submit_order(MarketOrderRequest(
                              symbol='URG1',
                              qty=1,
                              side='buy',
                              time_in_force='day'))

except Exception as e:
  print(e)

What are the actual API limits?

There are separate API limits for the market data API’s and the trading API’s.

The market data APIs (e.g., get_snapshot, get_latest_quote) have a limit of 200 calls/minute if you subscribe to the free Basic plan. That is increased to 10,000 calls/minute if you subscribe to the Algo Trader Plus plan. Note that this limit is applied per owner ID. All your paper and live accounts will share the same owner ID, so this limit applies to the total across all accounts.

The trading APIs (e.g., submit_order, get_account) have a limit of 200 calls/minute if using the commission-free model. That increases to 1000 calls per minute when using the smart router model. Note that this limit is applied per account.

Hope that answers at least some of your questions.

So, is the “commission free” plan the same as the “Algo Trader Plus” plan (what I’m on now)? That’s what I’m stuck on.

I’m defining “slippage” as the difference in my stop limit order’s ‘stop price’ and the actual price that it’s filled at. Now, I know there’s going to be some slippage here and there, but on CVLT earlier today, for example, I purchased a single share of CVLT. I put a stop limit on it for $88.07. The volume on that (minute) candle was over 200,000. My SL was triggered and it actually filled selling a single stock at $87.35, which is a slip of nearly a whole percentage point. I get slippage if I was placing a very large order OR if the bid/ask spread was huge, but I kinda have a hard time believing that to be the case (although I haven’t explicitly logged bid/ask on that particular algo yet).

I’m talking about when the order is sent to the execution venue and then rejected. I’m logging all of the Alpaca order responses, and taking algo action accordingly, but I’m flying blind when Alpaca ‘accepts’ an order and then it’s ‘rejected’ in the console (assuming this is the execution venue rejecting the order). My band-aid is to ‘guess’ why it might have been rejected and spam-call the API’s to check for correctness, and replace, the (now missing) order (which is a terrible way to handle a rejection, but IDK what else to do).

Is there just a simple chart of:
Alpaca Basic
Algo Trader Plus
Elite Comission-Free
Elite Smart Router
etc…..with all of the different Alpaca ‘tiers’, ‘features’, and ‘options’
…..that simply has a “X number of market data calls/mis” and “X num of trading API calls/min” along with the ‘benefits’ each tier has and then an embedded “what is this” hover-over link for each feature?

I’m honestly having a hard time just figuring out the different ‘tiers’ Alpaca has to offer and the simple differences between them. I’d love something simple like Toyota’s car model comparison chart. It’s just easy to read data and no marketing buzz words to slog through. I have little trouble bumping my account to the $30k threshold for an Elite account, but I just don’t understand it.

@kcducttaper I’ll answer your questions one at a time.

So, is the “commission free” plan the same as the “Algo Trader Plus” plan (what I’m on now)? That’s what I’m stuck on.

Those are two separate things.

The “Algo Trader Plus” and the “free Basic” plan refer to market data subscriptions. That’s the market data one can fetch using the APIs. The biggest difference between these two is that an Algo Trader Plus subscription allows access to real-time full market data. The free basic subscription only provides 15-minute-delayed full-market data. There’s a chart showing other differences between those two subscriptions here.

The “commission-free” and the “smart router” plan refer to order processing options. That’s how one’s orders are routed. The biggest difference between these two is that the commission-free model routes orders to a PFOF execution partner, with no commission. The smart router model routes orders to exchanges or other liquidity providers and charges a commission. See the chart below, and available here. Note that if one chooses the smart router model, there are two commission choices. One can choose a fixed commission of $0.004/share or ”cost plus” where exchange fees or rebates are passed through. Alpaca charges $0.0025/share, or lower with volume tiering, as a commission on top of your pass-through fees or rebates.

@kcducttaper

I’m defining “slippage” as the difference in my stop limit order’s ‘stop price’ and the actual price that it’s filled at. Now, I know there’s going to be some slippage here and there, but on CVLT earlier today, for example, I purchased a single share of CVLT. I put a stop limit on it for $88.07. The volume on that (minute) candle was over 200,000. My SL was triggered and it actually filled selling a single stock at $87.35, which is a slip of nearly a whole percentage point.

I was able to find your order and will step through how it triggered and then filled. After the order was submitted, trading was over your stop price of 88.07 for about 47 seconds. Then at 2026-04-10 10:02:48.0174 PST a trade executed at 87.375, which was below your stop price, so your order triggered. Your order was then filled about 40 ms later at 87.35.

The “slippage” you saw was simply that the first trade below your stop price of 88.07 was much lower at 87.375. Your order was triggered at a much lower price than you presumably expected. You cannot assume that orders will trigger exactly at your stop price. They trigger if any order executes at that price or less. The actual fill or execution of your order was very quick, in line with other trades at the time, and actually much better than the current bid.

Below is a chart beginning about when your order was submitted. The red lines indicate when the stop was triggered. The green line is your fill price.

Below are the trades just before your order triggered. The trade highlighted in red is the trade that triggered your stop. The trade highlighted in green is your trade. There was a single trade between when your order triggered and when it filled.

Below are the NBBO quotes at the time your order filled. The quote highlighted in red would have been the current quote. Notice the fill price your order sold at was above the current bid of 86.83.

@kcducttaper You also asked for reasons an order can be rejected once it is already created.

I’m talking about when the order is sent to the execution venue and then rejected.

While Alpaca performs several checks at the time an order is created, the execution partners also check a few things and can therefore reject an order once it is submitted. The two primary reasons why an order may be rejected are 1) the limit price is too far from the current price, or 2) the stop price is such that the order would trigger immediately. Each partner has slightly different rules for implementing these, which is one reason Alpaca doesn’t make these checks upfront.

If the limit price is too far from the current price, a broker may suspect the order was submitted incorrectly. For instance, a decimal in the wrong place or submitting an order for the wrong symbol. Generally, set a limit price within 10% of the last traded price, and it should be OK.

If the stop price is such that an order would trigger immediately, a broker may also suspect that it was submitted incorrectly. Generally, set the stop price outside the current quote. For a sell order, the stop price should be below the current bid, and for a buy order, the stop price should be above the current ask.

Alpaca is working to expose these errors in the order record. For now, if you would like reasons for specific errors, I can check the logs and provide feedback. Either ask here in the forums, the community Slack workspace, or submit an email to support@alpaca.markets.

For the Elite Smart Router plan, does that affect options trading? If so, how? Thanks