Skip to content
← BlogStrategyAnalysis

Why developers pick Norbelys: the API-first case, with receipts

Not 'developers love APIs' — the specific, checkable reasons a technical buyer picks Norbelys: one contract, 83 operations, four SDKs, a CLI, and MCP.

By Norbelys Chirinos, Co-founder

Founder-reviewed ·How we research and correct articles

“Developers love a good API” isn’t a reason — it’s a slogan every product page uses. The actual reasons a technical buyer picks one cold-email platform over another are more specific than that, and they’re checkable: does the thing you’d script against actually exist, does it match what the dashboard does, and does it stay in sync when the product changes. Here’s what that looks like concretely at Norbelys.

The claim: one contract, everything else generated

Most “API-first” claims mean “we have an API.” Norbelys’s version is narrower and more testable: there’s exactly one typed contract describing the product’s surface, and the REST API, the four official SDKs, the CLI, and the MCP server are all generated from that same document — not four separate implementations that happen to agree today.

That matters less as a philosophy and more as a guarantee: a field rename or a new operation shows up in the OpenAPI spec, the regenerated SDKs, and the CLI’s help output in the same release, because there’s nothing to hand-sync after the fact. There’s one name per field, chosen from Schema.org vocabulary where one already exists, and it’s the same name in every surface you touch.

Reason one: the dashboard has no private API

A common failure mode in “API-first” products is a public API that’s a second-class citizen — missing endpoints the UI quietly relies on, or a UI that was clearly built first and the API bolted on after. Norbelys’s public API is the same REST API the dashboard itself runs on — base URL, 83 operations, described in a single OpenAPI 3.1 spec. There’s no gap between “what you can click” and “what you can script,” because they’re the same surface.

Practically, that means anything a human can do in the app — enroll a contact, launch a program, pause a sender, pull analytics — a script can do too, with the same guarantees and the same field names.

Reason two: pick your runtime, not a second-class client

Norbelys ships four official SDKs, all generated from the same spec: @norbelys/sdk on npm, norbelys on PyPI, plus Go and Ruby. That means there’s no “the real one is TypeScript, the rest are afterthoughts” trap — the 83 operations behind each are identical, because they’re generated from the identical contract, not hand-ported between languages by different teams on different release schedules.

SituationWhat you reach for
Edge Worker or serverless functionNode/TypeScript SDK — runs natively on Workers, Deno and Node
Data script, notebook, or scheduled jobPython SDK — fits directly into pandas/Jupyter/cron workflows
High-throughput backend serviceGo SDK — compiled, low overhead, concurrent by default
Existing Rails or Ruby appRuby SDK — idiomatic error handling, snake_case conventions
A language none of the four coverThe REST API directly, or generate a client from the OpenAPI spec

The decision isn’t “which SDK is better” — it’s “where does the calling code already run,” which is a much easier question to answer honestly.

Reason three: the CLI and MCP aren’t separate products

A lot of platforms treat command-line and AI-agent access as an afterthought bolted onto the “real” API years later, with its own inconsistent naming and gaps in coverage. The norbelys CLI and the MCP server at mcp.norbelys.com/mcp are both generated from the same contract as the REST API and the SDKs — so a script running through the CLI, an agent calling Norbelys over MCP, and a backend service using the Go SDK are all hitting the identical operation set, with the identical field names.

That matters specifically for anyone building agent workflows in 2026: an AI agent calling Norbelys through MCP doesn’t get a stripped-down or differently-shaped version of the product — it gets the same 83 operations a human developer would call directly, described the same way.

Reason four: typed errors and cursor pagination, not ad-hoc conventions

Two smaller but concrete signals of API-first design, both checkable against the actual spec rather than taken on faith: every operation returns typed, predictable error shapes instead of a grab-bag of status-code conventions that differ by endpoint, and every list operation uses consistent cursor pagination rather than a mix of offset, page-number, and cursor styles across different resources. Neither is exotic on its own — together they’re the difference between an API you can build generic tooling against and one where every integration needs its own special-case error handling.

Reason five: authentication built for both humans and agents

The auth story is a small detail that reveals a lot about whether a platform was designed API-first or had an API retrofitted. Norbelys supports two paths deliberately: an org-scoped API key (ak_…) for headless callers and CI jobs, sent as a plain Authorization: Bearer header, and OAuth 2.1 discovery for interactive agents that need to register themselves rather than have a human paste in a secret. Both are documented in one place (/auth.md), and both authenticate against the identical operation set — there’s no reduced “agent tier” of the API with fewer capabilities than the key-based one.

That two-path design isn’t incidental. A platform bolting API access onto an existing UI-only product usually ships one crude auth mechanism, because it was built to satisfy one use case (a developer with a key) rather than anticipating that autonomous agents would eventually need to authenticate themselves without a human in the loop.

What this looks like next to a UI-only competitor

The clearest way to see the difference is to try the check yourself: pick a UI-only cold-email tool and search its public docs for a REST endpoint matching a dashboard feature you use daily — pausing a sender, bulk-updating suppressions, filtering analytics by a custom window. Often the answer is a support ticket or “that’s on our roadmap,” not a working call. Compare that against Norbelys vs. the rest of the market and the pattern holds: platforms built UI-first tend to treat the API as a feature to eventually add, not the foundation everything else sits on.

What this actually saves you

None of this is abstract elegance. It’s fewer integration bugs from a field that’s named differently in the docs than in the actual response, fewer support tickets from “the API doesn’t support what the UI does,” and no migration cost when you outgrow no-code automation and need a real script — because the script and the no-code layer were always calling the same contract.

The honest limits

API-first isn’t free of trade-offs. It means Norbelys invests engineering time in contract discipline and generation tooling instead of, say, a wider library of pre-built no-code templates — if your team has zero developer capacity and wants the richest possible click-only workflow builder, that’s a different set of priorities than the ones this design optimizes for. And generated SDKs, by nature, favor consistency over language-specific idiosyncrasy — they’re deliberately similar to each other rather than each one reinventing conventions to feel maximally native.

If you do have any developer capacity at all — even just someone comfortable scripting a CSV import or wiring a Slack/HubSpot/Pipedrive integration — the payoff is that nothing you build against Norbelys today becomes throwaway work when the product adds a feature tomorrow. The contract doesn’t change shape under you; it just grows.

Read the full developer portal for the base URL, the spec, the SDKs and the CLI install command, or start with why the API and the UI never drift apart for the broader argument this post is one instance of. If you’re weighing Norbelys against a specific incumbent rather than the category, the pricing page still applies the same way — the API is included at every tier, not sold as a developer add-on above a certain plan.