AI models and credits
The models Portline's AI steps can run on, what a run costs in credits, and how metering is enforced.
Prices are estimates
Every unit cost below is an estimate taken from the provider's pricing page. None has been checked against it yet, so credits a run can change before launch. AI runs are mocks in this build: no model is called.
Credits
One credit is $0.001 of model cost. A run costs its model's unit cost times the units a typical run uses, converted to credits and rounded up, with a minimum of 1. Because allowances are in credits, they work the same for every model: a cheap model buys many runs, a larger one fewer.
- Tiers give each included module its own monthly credits.
- Packs share one pool across their modules.
- Free trial: 400 credits in total.
- Hourly cap: runs over the plan's per-hour cap are queued for the next hour with room, never run at once.
The catalog
Rendered from MODELS in @portline/pricing. Nothing else in Portline names a model.
| Model | Kind | Unit cost (estimate) | Typical run | Credits a run | Source |
|---|---|---|---|---|---|
| Claude Haiku 5.5 · Anthropicdefault | Text | $2 per million tokens (blended) | 0.004 × unit | 8 | Anthropic pricingEstimate, not yet checked |
| Claude Sonnet 5.5 · Anthropic | Text | $6 per million tokens (blended) | 0.004 × unit | 24 | Anthropic pricingEstimate, not yet checked |
| GPT-5.1 · OpenAI | Text | $3.44 per million tokens (blended) | 0.004 × unit | 14 | OpenAI pricingEstimate, not yet checked |
| GPT-5 mini · OpenAI | Text | $0.69 per million tokens (blended) | 0.004 × unit | 3 | OpenAI pricingEstimate, not yet checked |
| GPT-5 nano · OpenAI | Text | $0.14 per million tokens (blended) | 0.004 × unit | 1 | OpenAI pricingEstimate, not yet checked |
| Grok 4.7 · xAI | Text | $3 per million tokens (blended) | 0.004 × unit | 12 | xAI pricingEstimate, not yet checked |
| Grok 4.3 · xAI | Text | $1.56 per million tokens (blended) | 0.004 × unit | 7 | xAI pricingEstimate, not yet checked |
| GLM 5.2 (open weights) · Z.ai | Text | $2.15 per million tokens (blended) | 0.004 × unit | 9 | Z.ai pricingEstimate, not yet checked |
| Nemotron 3 Ultra (open weights) · NVIDIA | Text | $1.05 per million tokens (blended) | 0.004 × unit | 5 | NVIDIA pricingEstimate, not yet checked |
| Nemotron 3 Nano (open weights) · NVIDIA | Text | $0.11 per million tokens (blended) | 0.004 × unit | 1 | NVIDIA pricingEstimate, not yet checked |
| Nemotron 3.5 Super VL (open weights) · NVIDIA | Text | $0.24 per million tokens (blended) | 0.004 × unit | 1 | NVIDIA pricingEstimate, not yet checked |
| Gemini Flash (vision) · Googledefault | Image | $0.004 per image | 1 × unit | 4 | Google pricingEstimate, not yet checked |
| GPT Image 1 · OpenAI | Image | $0.04 per image | 1 × unit | 40 | OpenAI pricingEstimate, not yet checked |
| Grok Imagine · xAI | Image | $0.02 per image | 1 × unit | 20 | xAI pricingEstimate, not yet checked |
| Veo 3 Fast · Googledefault | Video | $0.15 per second of video | 8 × unit | 1200 | Google pricingEstimate, not yet checked |
| Grok Imagine Video · xAI | Video | $0.05 per second of video | 8 × unit | 400 | xAI pricingEstimate, not yet checked |
| ElevenLabs Flash · ElevenLabsdefault | Voice | $0.05 per 1,000 characters | 0.8 × unit | 40 | ElevenLabs pricingEstimate, not yet checked |
| Whisper · OpenAIdefault | Transcription | $0.006 per minute of audio | 2 × unit | 12 | OpenAI pricingEstimate, not yet checked |
| Deepgram Nova-3 · Deepgram | Transcription | $0.0045 per minute of audio | 2 × unit | 9 | Deepgram pricingEstimate, not yet checked |
Template steps
Each AI step names a kind of model (text, image, video, voice or transcription), not a specific model. A run uses the model the user picked if it is of the right kind, otherwise the step's default. On a tier, the step's area decides which module's credits pay for it.
| Step | Kind | Paid from | Default model | What it does |
|---|---|---|---|---|
| AI summary | Text | Overview | Claude Haiku 5.5 (8 credits) | A short paragraph on what needs attention in the current area. |
| Assistant reply | Text | Overview | Claude Haiku 5.5 (8 credits) | One answer in the Assistant chat, with the records it looked at. |
| Damage check | Image | Docks | Gemini Flash (vision) (4 credits) | Looks at a pallet photo from the dock and flags visible damage. |
| Gate clip summary | Video | Docks | Veo 3 Fast (1,200 credits) | A short summary of a gate camera clip for a truck arrival. |
| Voice brief to driver | Voice | Messages | ElevenLabs Flash (40 credits) | Reads a message aloud as a voice note for a driver. |
| Voicemail to thread | Transcription | Messages | Whisper (12 credits) | Turns a driver voicemail into text in the thread. |
What a plan's credits buy
| Plan | Credits / month | Text (Claude Haiku 5.5) | Image (Gemini Flash (vision)) | Video (Veo 3 Fast) | Voice (ElevenLabs Flash) | Transcription (Whisper) |
|---|---|---|---|---|---|---|
| Starter | 1,200 per module | 150 runs | 300 runs | 1 runs | 30 runs | 100 runs |
| Growth | 1,200 per module | 150 runs | 300 runs | 1 runs | 30 runs | 100 runs |
| Scale | 1,200 per module | 150 runs | 300 runs | 1 runs | 30 runs | 100 runs |
| Cold chain | 9,600 shared | 1,200 runs | 2,400 runs | 8 runs | 240 runs | 800 runs |
| Drayage & trucking | 8,000 shared | 1,000 runs | 2,000 runs | 6 runs | 200 runs | 666 runs |
| 3PL warehousing | 9,600 shared | 1,200 runs | 2,400 runs | 8 runs | 240 runs | 800 runs |
How metering is enforced
The app checks credits before a run, and Postgres checks again on every insert into pl_ai_runs:
pl.ai_modelsandpl.ai_stepsmirror the catalog and the steps (the database test suite checks the mirrors match@portline/pricing).- The meter trigger refuses a run whose model doesn't fit the step's kind, and sets the run's credits from
pl.ai_models, whatever the client sent. - It sums the credits already used this month (per module on a tier, across the pool on a pack, or the trial pool) and refuses a run that would go past the allowance.
- When the last hour already holds the plan's cap of runs, it queues the run for the next hour with room instead of running it.