@@ -69,8 +69,13 @@ type ProviderInfo struct {
6969 Mode apiMode // how model_list entries are shaped
7070 BaseURL string // OpenAI-compatible base_url (modeOpenAICompatible only)
7171 Default string // default chat model when --model is omitted ("" = ask/require)
72- SignupURL string // where to obtain an API key (shown as a hint)
73- Free []string // curated zero-marginal-cost model ids (seeded by --free)
72+ SignupURL string // where to obtain an API key (assumes existing account)
73+ JoinURL string // optional landing page for users without an account yet
74+ // (may carry a referral tag). When set, `obol buy inference <provider>`
75+ // opens this in preference to SignupURL, and `obol model setup`'s
76+ // missing-key Dim hint surfaces it as a "new to X? sign up" line above
77+ // the keys-dashboard hint.
78+ Free []string // curated zero-marginal-cost model ids (seeded by --free)
7479}
7580
7681// IsBYOK reports whether the provider is a BYOK OpenAI-compatible
@@ -103,7 +108,9 @@ var knownProviders = []ProviderInfo{
103108 // model from the live /v1/models list or --model.
104109 {
105110 ID : "venice" , Name : "Venice" , EnvVar : "VENICE_API_KEY" , Mode : modeOpenAICompatible ,
106- BaseURL : "https://api.venice.ai/api/v1" , SignupURL : "https://venice.ai/settings/api" ,
111+ BaseURL : "https://api.venice.ai/api/v1" ,
112+ SignupURL : "https://venice.ai/settings/api" ,
113+ JoinURL : "https://venice.ai/chat?ref=ZynMuD" ,
107114 },
108115 {
109116 ID : "openrouter" , Name : "OpenRouter" , EnvVar : "OPENROUTER_API_KEY" , Mode : modeOpenAICompatible ,
0 commit comments