Build
Connect & operate
Design & teams
Start hereScope a build in one callBring a spec, a wireframe, or a paragraph. You leave with an architecture, a timeline, and a number.Book a scoping call
AI software
LLM & data systems
Vibe coding
Ready to ship?Put AI where the work isAgents, RAG, and private LLMs wired into the systems your team already uses — not a chatbot bolted to a homepage.Discuss an AI project
Domain firstWe learn your workflow before we model itRegulated, operational, or high-volume — the constraints belong in the schema, not in a training doc.Talk about your domain
Plan smarterEstimate before you commitCost ranges, scope templates, and the questions we ask in discovery — free, no form.Open the cost calculator
Real conversationsTalk with a technical leadNo SDR, no discovery gauntlet. The person on the call is the one who scopes the build.Book a call
REST · GraphQL · webhooks · events

API development
and integration services.

Interfaces other companies can build against, and integrations that keep working when the other side has an outage. Idempotency, rate limits and retries designed in at the start — not discovered in the incident review.

Scope an integration How engagements work
OpenAPI from day onePer-consumer credentialsMonitoring that alerts a human

REST

GraphQL & webhooks

Whatever the consumer needs

390+

Projects shipped

Since 2013

99.9%

Uptime targets

With the alerting to prove it

100%

Docs and code yours

OpenAPI from day one

What you are buying

Four kinds of API work that get sold as one thing

These have different risks, different costs and different failure modes. Quoting them as a single line item is how integration projects overrun.

Building an API others consume

A public or partner interface with versioning, authentication, rate limits and documentation. The hard part is not the first endpoint — it is that every design decision becomes permanent the moment somebody integrates against it, so the contract deserves more care than the implementation.

Integrating somebody else's

Where most of the real cost lives, and almost none of the estimating attention. The difficulty is never your code; it is their pagination, their rate limits, their undocumented error codes and their sandbox that behaves differently from production.

Making two systems agree

Synchronising data between systems that each believe they are authoritative. This is a data-modelling problem wearing an integration costume, and solving it with a nightly job that overwrites one side is how companies end up with two sets of numbers.

Webhook and event infrastructure

Receiving events reliably means signature verification, idempotency, retries with backoff, and a dead-letter queue somebody actually reads. Sending them means the same guarantees in reverse, because your consumers will be down at some point and that must not lose their data.

What makes an API worth integrating against

The five properties consumers judge you on

An API is a product with developers as its users, and they form an opinion in about twenty minutes.

PropertyWhat it means in practice
PredictableConsistent naming, consistent pagination, consistent errors. A developer should be able to guess the fifth endpoint correctly after reading four. Surprise is the most expensive thing an API can contain.
Honest errorsA machine-readable code, a human-readable message, and a documented list of what can go wrong per endpoint. A 500 with an empty body turns a ten-minute fix into a support ticket.
Versioned deliberatelyA stated compatibility policy and a deprecation window, decided before the first consumer arrives. Breaking changes shipped without one destroy trust faster than downtime does.
Documented from the sourceOpenAPI generated from the implementation, so the docs cannot drift. Hand-maintained documentation is accurate exactly once.
ObservablePer-consumer metrics and structured logs, so when somebody says the API is slow you can tell them which endpoint, which client and since when.

Protocols and patterns

What we build with, and when each one is the right answer

Most of these decisions are reversible only at significant cost, so they get made deliberately and written down rather than inherited from whatever the last project used.

ApproachWhen it is rightWhat it costs you
REST over HTTPThe default for anything externalCacheable at the edge, debuggable with tools every developer already has, and integrable without a client library. Unless something specific argues otherwise, this is what a partner wants to receive.
GraphQLMany clients, very different data shapesEarns its complexity when over-fetching is a measured problem rather than a theoretical one. The costs are a schema to maintain, a caching story to solve and query-depth limits to enforce before somebody writes an expensive query.
WebhooksYou need to tell someone something happenedSigned payloads, at-least-once delivery, exponential backoff and a replay endpoint. Consumers will be down; the design has to assume it rather than hope.
Message queuesWork must survive a restartSQS, Pub/Sub or Rabbit between services so a deploy or a third-party outage delays work instead of losing it. The queue is also where back-pressure becomes visible before it becomes an incident.
gRPCInternal service-to-service, high volumeWorth the tooling cost inside your own perimeter where both ends ship together. Rarely worth exposing to partners, who mostly want to curl something.
File and batchThe other side is a bank or an ERPSFTP drops and fixed-width files are still how large parts of finance and logistics work. Treating that as legacy rather than as a requirement is how integration projects lose a month.

How an engagement runs

From credentials to production traffic

Integration work has a specific shape, because the expensive discoveries are almost always about the other system rather than yours. The sequence below front-loads those.

WhenWhat happensWhy it is there
Week 1Contract discoveryRead their docs, then verify them against actual responses — pagination, rate limits, error codes, auth expiry, what their sandbox does differently from production. The gap between documented and real behaviour is the project's main risk and it is found here, not in week five.
Week 1–2Data model agreementDecide which system is authoritative for each field, and what happens when both change. Written down and agreed by someone with authority, because this is the decision that quietly creates two sets of numbers if it is skipped.
Week 2–4Build behind a flagIdempotency keys, retry with backoff, dead-letter capture and per-consumer credentials from the first commit rather than added after the first incident. Shipped dark so it can run against real traffic before anything depends on it.
Week 3–5Run against production shadowReal volumes, real edge cases, no user impact. This is where rate limits, timeout behaviour and the records that break assumptions actually surface.
CutoverMonitoring before switchDashboards, alerts on the dead-letter queue, and a documented rollback. Then traffic moves. An integration that goes live before it is observable is one nobody can defend at 3am.

Where an existing integration is already live and misbehaving, the same sequence runs in reverse: shadow the current behaviour, find where it diverges from what anyone believes, then fix against evidence.

What it costs

API development and integration pricing

Real ranges. The variable that moves a quote is not endpoint count — it is how well documented the other side is, and whether it has a sandbox that behaves like production.

EngagementTypical rangeTimelineWhat it buys
Single integrationScoped per engagement2 – 5 weeksOne third-party system connected properly: auth, sync, retries, error handling, monitoring. Not a script that runs nightly and hopes.
API buildScoped per engagement6 – 12 weeksA REST or GraphQL interface for external consumers with versioning, rate limiting, OpenAPI docs and a developer sandbox.
Event infrastructureScoped per engagement4 – 10 weeksWebhook delivery or ingestion with signatures, idempotency, retries, dead-letter handling and replay.
Integration platformScoped per engagement3 – 8 monthsMany systems, one canonical data model, and the reconciliation that stops two sources disagreeing.
Rescue engagementScoped per engagement2 – 6 weeksAn integration that half works. Usually idempotency, rate limiting or error handling that was never built, found and fixed against real traffic.

Ranges assume US-based senior engineers and include testing, monitoring and documentation. An integration quoted without those three is a prototype, and the difference shows up the first time the other side has an outage.

Where integrations fail

Five traps that turn a two-week job into a two-month one

Every one of these is cheap to design for at the start and expensive to retrofit under load.

No idempotency

The same webhook arrives twice — which it will, because every reputable sender retries — and you charge the customer twice. An idempotency key at the boundary costs an afternoon. Reconciling duplicate financial records costs considerably more.

Rate limits discovered in production

The sandbox had generous limits and production does not. Backoff, queueing and a bulk strategy belong in the design, not in the incident review.

Sync built as a nightly overwrite

One side wins by default and edits made on the other side vanish overnight. Users stop trusting the data and start keeping a spreadsheet, which is the failure you were integrating to prevent.

Their outage becomes your outage

A synchronous call to a third party inside your own request path means their downtime is yours. Queue it, degrade gracefully, and tell the user something true.

Nobody watches the dead-letter queue

Failures are captured correctly and then never looked at, so the system quietly drops data for weeks. A queue with no alert on it is a queue that does not exist.

Systems we integrate against most

The integrations that come up every month

Not an exhaustive list — it is where we have already met the undocumented behaviour, which is the part you are really buying.

Payments and finance

Stripe, Adyen, Plaid, QuickBooks, NetSuite, Xero. Idempotency is non-negotiable here: a retried webhook that charges twice is the most expensive bug in this category, and every one of these senders retries.

CRM and sales

Salesforce, HubSpot, Pipedrive, Dynamics. The recurring difficulty is not the API, it is that custom fields differ per tenant, so a mapping layer belongs in the design rather than hard-coded field names.

Commerce

Shopify, WooCommerce, Magento, BigCommerce. Watch tax and currency handling — whether totals include tax varies by platform and by store setting, and getting it wrong is a reconciliation problem rather than a crash.

Identity

Okta, Auth0, Entra ID, Google Workspace. SCIM provisioning is usually the real requirement behind 'we need SSO', and it is a meaningfully larger job than the login flow.

Logistics and ERP

SAP, Oracle, Dynamics, carrier APIs, EDI. Expect batch files and fixed-width formats alongside anything modern, and budget for a sandbox that does not exist.

Communications and AI

Twilio, SendGrid, Slack, plus OpenAI and Anthropic endpoints. Rate limits and token accounting are the operational concerns; both need queueing under real load rather than synchronous calls.

Security and reliability

What has to be true before an API carries real traffic

These are the checks an integration is audited against here, and the list a client can hold us to.

Per-consumer credentials

Every consumer gets its own key or client, scoped to what it needs. A shared credential you cannot revoke for one customer without breaking the others is an incident waiting for a reason to happen.

Secrets in a managed store

Parameter Store, Secret Manager or Vault, injected at runtime. Never in the repository, never in a committed env file, and rotatable without a deploy.

Signature verification on inbound

Every webhook payload is verified against the sender's signature before it is parsed, and a replayed request with an old timestamp is rejected. An unauthenticated inbound endpoint is a public write API.

Rate limits you enforce

Limits per consumer, returned as headers so a well-behaved client can back off, with a 429 rather than a timeout when they are exceeded. Protecting your own database is the point.

Timeouts and circuit breaking

Every outbound call has a timeout and a defined behaviour when it trips. A third party that hangs must not hold your request threads open until the whole service falls over.

Alerting that reaches a person

Error rate, latency percentiles and dead-letter depth, alerting to somewhere a human reads. Dashboards nobody opens are documentation, not monitoring.

Related

Related services

Work that commonly sits either side of an integration project.

Questions

Buying API development

What teams ask before a first call.

A single third-party integration is the smallest engagement here; building an API that other companies consume is a larger one. The table above sets out the shapes.

What moves a quote is the quality of the other side — a well-documented API with a real sandbox lands at the bottom of any range, and an undocumented legacy SOAP endpoint with no test environment can cost more than the feature it feeds. That is why the number comes from a scoping call rather than a price list.

Integration half working, or not started?

Thirty minutes with an engineer who has integrated against the badly documented version of whatever you are looking at. You leave with an approach and a number.