Skip to content

GuidesResources

Predictefy meters API actions in credits. Each plan includes a monthly allowance, a request limit, API-key and WebSocket-stream caps, and a defined product-access level.

The table below is the settled public plan structure, and it is enforced today. Every new account starts on the Free plan.

PlanMonthly priceAnnual priceIncluded credits / monthExtra 100KRequests/minAPI keysWS streams
Free$0—25,000Not available6012
Builder$48.88$469.25500,000$11300320
Pro — Most Popular$149$1,430.405,000,000$5.503,00010100
EnterpriseCustom, $2,500 minimumCustomCustomCustomCustomCustomCustom

Enterprise remains contract-only.

Builder and Pro can be billed monthly or annually. A year costs 20% less than twelve monthly payments — $469.25 instead of $586.56 on Builder, $1,430.40 instead of $1,788 on Pro. What also changes is when the credits arrive:

  • Monthly — one month of included credits is granted each time a monthly invoice is paid.
  • Annual — all twelve months of included credits (6,000,000 on Builder, 60,000,000 on Pro) are granted up-front when the annual invoice is paid, and again at each annual renewal.

POST /v1/billing/subscribe takes an optional interval of "month" (the default) or "year"; any other value is a 400, and a plan without an annual price answers 404 PLAN_NOT_FOUND for "year". The twelve-month grant is made for an annual invoice on which money was actually paid; an annual invoice that totals $0 (for example under a 100%-off coupon) is granted one month and reviewed by hand. Upgrading from annual Builder to annual Pro grants the difference for the months that remain in the prepaid year, counting a started month as a whole one — see Billing. Switching an existing subscription between monthly and annual billing does not grant or remove credits by itself; if a switch leaves you short of what you paid for, contact support@predictefy.com.

When an available balance is exhausted, requests stop with 402 INSUFFICIENT_CREDITS. Upgrade to a paid plan for a larger monthly allowance, or contact support@predictefy.com if a balance looks wrong. Free has no paid overage unit; Builder and Pro can add credits in the plan-specific 100K units shown above.

FeatureFreeBuilderProEnterprise
Historical data7 days12 monthsUnlimitedUnlimited
Cross-market matchingLimited; results may be delayedYesReal-timeReal-time
Price-gap feedNoneBasicFullFull
Arbitrage feedNoneFullFullFull
Bulk endpointsNoYesYesYes
Execution (trading)YesYesYesYes
Commercial useNoNoYesYes
SupportCommunityCommunityPriorityCustom

These rules are live since 2026-09-11 for every account; there is no separate beta enrolment any more.

FeatureFreeBuilderProEnterprise
Paper trading: open orders at onceUp to 10Up to 50Up to 200No cap
History replay: history windowNot included12 monthsUnlimitedUnlimited
Conditional orders: armed at onceNot includedNot includedUp to 25No cap
Pending fills (Polymarket)Not includedNot includedYesYes

Paper caps count orders currently open or partially_filled per account; fills, cancels, and account resets are unlimited. Conditional caps count orders currently armed per account. Hosted firing stays off for every plan. Replay keeps its 20,000-row page and 31-day per-call ceilings on every plan, at 5 credits per page; paper trading metering is unchanged. See Paper trading, History replay, and Conditional orders for the rules and errors.

Commercial use is a documentation and terms entitlement. It is not enforced by an API response. Trading ships on every plan: new keys carry only read; add trade by selecting the trading opt-in when creating a key. Existing keys are unchanged, and execution is metered in credits like every other action. The tier splits above are enforced by the API today: a Free key calling an arbitrage, price-gap, or bulk endpoint gets 403 PLAN_REQUIRED, and so does a history read that reaches behind the plan’s window.

The /v1/sql analytical surface is separate from these plans: it requires a dedicated sql scope that no self-serve plan grants. SQL access is available on request — contact support.

ActionCredits
Metadata, search, or price snapshot1
Account balance, current-period usage, and ledger (GET /v1/usage)1
Latest venue metrics (/v1/venues/metrics)1
Webhook delivery polling1
Sports facets, competitions, teams, or fixture list (/v1/sports/…)1
Trades, or reference-feed candles (/api/feeds/…)2
Live venue-proxy read — account snapshot, funding requirements or steps, transfer plan, bridge quote, session, or status3
Order-book snapshot5
Historical query — venue candles (fetchOHLCV) and the raw book tape5
Historical replay page (/v1/history/replay, Builder and above) — one charge per NDJSON page5
Existing cross-match lookup5
Sports price grid, fixture detail, or single-fixture compare (/v1/sports/screen, /v1/sports/fixtures/{fixtureId}, /v1/sports/fixtures/{fixtureId}/compare)5
Sports fixture price history (/v1/sports/fixtures/{fixtureId}/history, sports_history; dark by default)5
Order submission, cancellation, modification, or client-direct acknowledgment5
Discrepancy qualification7
Cross-venue comparison10
Price-gap query10
Smart-money analytics10
Cross-venue portfolio valuation (/v1/portfolio)10
Enterprise SQL (POST /v1/sql)10
Arbitrage query15

Sports fixture history uses the history weight: 5 credits today, independently tunable through sports_history like the other sports weights. It remains dark by default behind READS_ENABLE_SPORTS_HISTORY inside the sports family; dark calls are not charged. The optional stake= calculator on fetchArbitrage is also dark by default, behind READS_ENABLE_ARBITRAGE_STAKE, and adds no credits when enabled.

Paper trading (/v1/paper/*) is metered at 0 credits: the orders are simulated, so there is no venue call behind them.

Conditional orders are free to arm, list, read, cancel, and report during the beta — arming attaches a rule to an execution you already built and calls no venue. When a hosted conditional order actually fires it becomes a venue submission and bills the 5-credit order-submission row above, refunded on failure exactly like a submit you sent yourself.

ai_cross_match is a reserved pricing key in the database, but no request route maps to it, so it is not charged today. Matching runs as a background job; stored cross-match lookups use the 5-credit row above.

Qualification is priced at 7 rather than the 10 of the comparison class it once shared: one qualification call performs two live order-book reads (3 credits each) plus its own computation. Enterprise SQL is metered like any other action even though the sql scope is provisioned separately. Billing checkout, subscribe, and portal calls are metered at 0 credits — they are recorded as usage but buying a plan costs nothing.

Bulk requests cost the action’s base credits multiplied by ceil(items / 100), with a minimum multiplier of one. For example, 101 order-book snapshots cost 10 credits.

Streaming remains metered at 2 credits per connection-minute, prepaid. The WS-stream value in the plan table limits active logical subscriptions.

A connection holding a Polymarket pending fills subscription (filters.status of pending or all) is metered at 800 credits per connection-minute for every minute it holds one, replacing that minute’s 2-credit base charge rather than adding to it. The first pending minute is charged when the subscription is accepted, in addition to the connect-time minute already prepaid; a balance that cannot cover it refuses the subscription with INSUFFICIENT_CREDITS and leaves the socket open. Pending fills require the Pro plan or higher.

GET /v1/usage returns the authenticated account’s post-charge balance, current billing-period request and credit totals grouped by endpoint weight class, and a newest-first credit-ledger page. It accepts limit (default 25, maximum 100) and an opaque cursor; follow nextCursor until it is omitted. The API key always selects its own account — the request has no account-id parameter.

Paid accounts use the active subscription mirror’s current period. The exact start comes from the matching monthly grant; a zero-grant or trial period falls back to one month before the mirrored period end. Accounts without a current paid period use the UTC calendar month. Usage totals read the existing buffered metering ledger, so they can trail newly served requests by the normal flush interval and can reflect the documented rare restart-window undercount.

Every reads-gateway response that reaches a metered route includes X-Credits-Charged, reporting the net charge after automatic error refunds. X-Credits-Remaining is also included when the existing debit or refund operation already produced the balance. Predictefy does not add a database round trip only to populate that optional header. Health, unmetered, and pre-meter rejections do not carry credit headers. The isolated execution origin meters eligible lifecycle calls but does not add credit headers to its responses.

When a balance cannot cover an action, the REST API returns 402 INSUFFICIENT_CREDITS; streaming closes with code 4002. The action is not served, it costs nothing, and the balance is not pushed below zero.

On the reads origin, any metered request answered with a 4xx or 5xx error is refunded automatically and costs nothing. On the isolated execution origin, every 5xx and replay-served duplicate is refunded. For a 4xx, only SPEND_CAP_EXCEEDED, ARTIFACT_VERSION_CONFLICT, and VENUE_NOT_SUPPORTED are refunded; any other metered execution 4xx keeps the 5-credit order-lifecycle charge. If a refund write itself fails, the original charge stands. A refunded request records zero credits in your usage.

Requests we reject before metering them at all are never charged: a missing or invalid API key, a missing scope, a plan that does not include the endpoint, a blocked region, a missing Idempotency-Key, and rate limiting.

One related behavior to know: after 3 consecutive 401 VENUE_CREDENTIAL_REJECTED responses on a venue, the platform fast-fails further submits to that venue for 15 minutes instead of re-asking the venue. The three venue-rejected 401 responses that trip the breaker each keep the 5-credit execution charge. Once the breaker is open, further fast-fails happen before metering and are free; fix the credential and retry after the window.

A replayed request served from a stored result (Idempotency-Replay: true) also records zero credits — you pay for an action once, not once per retry.

Self-serve plan and eligible overage checkout use Stripe; Predictefy does not receive card details. Subscription management opens Stripe’s hosted customer portal. Enterprise continues to require a contract.

Plan upgrades grant the difference between the new monthly allotment and the highest allotment already funded for the current period immediately. For example, Builder to Pro adds 4,500,000 credits. If the period’s monthly grant has not arrived yet, the paid invoice grants the full new allotment once. Returning to an allotment already funded in the same period adds no more credits. Proration invoices do not grant credits. On annual billing the difference is granted for the months that remain in the prepaid year, not for the whole year: the monthly difference × the whole months left, where a started month counts as a whole one. Annual Builder to annual Pro adds 54,000,000 credits (4,500,000 × 12) at the start of the year, 27,000,000 (× 6) with six months left, and 4,500,000 (× 1) in the final month. A change that also switches between monthly and annual billing grants nothing automatically.

Downgrades apply at renewal with no credit clawback. Operators must configure Stripe’s Customer Portal to schedule downgrades at period end; Predictefy follows Stripe’s subscription updates and does not schedule downgrades itself.

The developer dashboard’s /usage page shows the same balance and accounting data. Server-side clients can read it through GET /v1/usage.