All services
Backend

API and integration development

The layer between two systems that were not designed for each other โ€” including the failure modes nobody specifies.

Pricefrom $800

How this one runs

Category
api-development
Starts with
A free 30-minute scoping call
Engagement
Fixed price, milestone, retainer or fractional
After launch
Thirty days of fixes included
Reply time
Within one business day

About this service

Delivered as Node, Cloudflare Workers, and REST work, under the constraint every product in this catalogue is built under: it has to run without a paid service in the critical path, without a server that must be kept alive, and without a vendor whose pricing can move under you. That began as a budget decision and became a design one.

Scope is agreed on a call before anything is quoted, and what the work does not include is written down at the same time as what it does. If this is the wrong service for your problem, that is a sentence you get on the call rather than a discovery in week three.

How this one goes

What the work actually looks like

Two systems that were never designed for each other meet at a seam, and nobody owns the seam.

A specification describes the happy path, because the happy path is the part both teams already agree about. What it rarely describes is the timeout, the duplicate delivery, the partial success, or the response that arrives with a 200 status and a failure buried in the body.

Those are the states an integration spends most of its life in.

The work is not the call. The work is everything that happens when the call misbehaves.

Most people who ask for this already have both systems running. What they do not have is a reliable answer to what happened to the order placed while the payment provider was restarting, or why one customer received two confirmation messages and another received none.

The first constraint predates the project. Nothing runs on a server that must be kept alive, so the integration lives in the project's own backend where there is one and in a small edge function where there is not.

A secret never reaches the browser.

Anything holding a key runs on the server side of that line, and the line is drawn once rather than argued about per endpoint.

The second constraint comes from the other system. Its rate limits, its quotas and its maintenance windows are facts to design around, and the integration that survives is the one treating a 429 as an expected state rather than an incident.

A third gets skipped more often than either. An API is a promise about a shape. Once somebody else depends on it the shape stops being yours to change quietly, and versioning is what buys back the right to change it at all.

What an engagement of this shape covers is the same list, project to project.

REST or GraphQL, versioned and documented. Authentication, rate limiting and quotas. Retries, backoff and idempotency.

A contract both sides can validate against. And machine-readable documentation an agent can consume, because whatever reads your API next is as likely to be a program as a person.

Idempotency is the one worth explaining. Every write carries a key, and a repeated request with the same key returns the first result rather than doing the work twice, which is what makes a retry safe to attempt at all.

Without it a retry is a coin flip with somebody's money on it.

The contract saves the most argument. One schema, checked by the client before it sends and by the server before it trusts, so a mismatch is caught at the boundary and named there rather than surfacing days later as a blank screen.

Rate limiting is the deliverable people assume is optional. It is what stops one consumer, or one loop somebody left running overnight, from spending the quota everybody else is sharing.

FilesHub is the API published on this site and it has its own page here. I am Ahsan Mahmood and I wrote both sides of it. That is the only reason I know how much of this work sits below the endpoint list.

The honest version is more code than the hopeful one. A naive integration is a function call.

This one is a function call, a key, somewhere to store the key, a policy for how long to keep it, and a decision about what a partial success means to your business rather than to the API. That last decision is yours.

Retries make a bad day slower rather than louder, which is the right trade and rarely feels like it while you are waiting.

A versioned contract means the old version keeps working after the new one arrives, so a deprecation becomes a date you commit to rather than a switch you flip.

There is a documentation cost nobody budgets. Machine-readable docs are generated from the same definition the server runs, because a hand-written page describing an endpoint is a second source of truth and it goes wrong quickly.

None of this is glamorous work. It is the difference between an integration that is finished and one that has only been demonstrated.

The exclusions do not change from service to service. Visual design as a standalone deliverable. Native iOS. Blockchain work. Copywriting and content.

One more belongs to this service in particular. The other system's uptime, rate limits and deprecation schedule sit outside anything I can promise you. An integration is only ever as available as the least available thing inside it, which is a sentence worth having in the contract rather than in a post-mortem.

Third-party subscriptions are yours, and so is any quota the other system meters. Thirty days of bug fixes at no charge, and after that nothing is automatic.

What no contract covers is the day the other system changes without telling either of us.

What is included

Five deliverables, every time this service is bought. Anything outside this list is quoted separately rather than assumed.

  • 01REST or GraphQL, versioned and documented
  • 02Authentication, rate limiting and quotas
  • 03Retries, backoff and idempotency
  • 04A contract two sides can both validate against
  • 05Machine-readable docs an agent can consume

Technologies and tools

The default set for this service. A project with a good reason to differ gets that reason written down before we start.

  • Node
  • Cloudflare Workers
  • REST

Questions

Common questions

The questions that actually arrive, answered in the first sentence.

What do you mean by the failure modes nobody specifies?
The timeout, the duplicate delivery, the partial success, and the response that returns a 200 status with a failure inside the body. Those are the states an integration spends most of its life in, and a specification usually describes the happy path instead. Retries, backoff and idempotency are part of every engagement of this shape for exactly that reason.
REST or GraphQL?
Whichever the consumers argue for, decided on the scoping call and documented either way. REST suits a small number of well-known resources. GraphQL suits many consumers who each want a different slice of the same data. Both are versioned, both are authenticated and rate limited, and both ship with machine-readable docs.
My product has no backend of its own. Can it still have an integration?
Yes, and it is the common case here. The server-side piece is a small edge function on the platform the project already uses rather than a server somebody has to keep alive, and it exists so the key, the retry state and the idempotency record have somewhere to live that is not the browser. That is a few files, not an infrastructure decision.
Can my team build against this while you are still working on it?
Yes, because the contract is a schema both sides validate against rather than a document one side wrote. The client checks before it sends and the server checks before it trusts, so a mismatch is named at the boundary instead of arriving later as a bug report about a blank screen.
How much does an API or integration project cost?
$800 USD is the floor for a small, well-defined feature. Everything above that comes from a scoping call, in writing, before any work starts. What moves the number here is how many failure paths the integration has to handle and how well the other system is documented, because an undocumented endpoint is discovered by calling it.

Why choose this

Four commitments that hold for this service the same way they hold for the other eight.

Built the way it will be maintained

Typed end to end, structured so a second developer can find things, and commented where the reasoning is not obvious from the code. You are not buying a codebase only I can read.

The failure paths are designed, not discovered

Empty, loading, offline and error states are built with the feature rather than after it, because those are what a real user meets on a first run or a bad connection.

You see it running every week

A working demo against the milestone, not a status update. If something slipped you hear it that week, while there is still time to change what we do about it.

Handed over completely

Repository, store listings and documentation are yours. Nothing needed to run or rebuild the product stays on my machine, and nothing is licensed back to you.

Ready to start?

Tell me what you are building and roughly when you need it. The first call is thirty minutes, costs nothing, and ends with either a scope or an honest reason not to proceed.

Related services

Frequently bought alongside this one, or a better fit if this is not quite it.