application services · api integration

Integrations where every call carries the right token for the right API.

The integration that breaks at 2 a.m. is usually the one sharing an API key with three other jobs, right after someone rotated it. We work out authentication, retries and monitoring while we do the field mapping, not after it.

platforms
application-services / api-integration 7 platforms
01 · CALLERS 02 · CONTROL 03 · SYSTEMS Custom application: web · mobile · batch Custom application web · mobile · batch Integration service: own OAuth client Integration service own OAuth client Authorization server: Okta · Entra ID · Auth0 Authorization server Okta · Entra ID ·Auth0 API gateway: scopes · rate limits · logs API gateway scopes · rate limits ·logs Event broker: Kafka · Service Bus · EventBridge Event broker Kafka · Service Bus ·EventBridge CRM: Salesforce CRM Salesforce ERP: Dynamics 365 ERP Dynamics 365 Data platform: Snowflake Data platform Snowflake
SalesforceMicrosoft Dynamics 365Microsoft Power PlatformSnowflake
in short·15-second read

API integration connects your systems so data moves between them reliably and securely.

Cohash designs and builds REST and event-driven integrations between CRM, ERP, data platforms and custom applications, including Salesforce and Dynamics 365. Each integration gets its own OAuth client, narrow scopes and audience-restricted tokens, checked against the OWASP API Security Top 10, with retries, idempotency and alerting so failures are visible.

you probably need this if
  • Integrations share one admin account and a password nobody wants to rotate.
  • A sync between the CRM and ERP fails quietly and someone notices days later.
  • The API trusts any signed-in caller. Swap the ID in the request and you get someone else's record back.
Ask an engineer facts checked 2026-10-20 · 5 sources
how it runs
  1. 01Map flows and ownership
  2. 02Design contracts and auth
  3. 03Build and test failure cases
  4. 04Operate
you keep
  • Integration inventory with system-of-record per field
  • OpenAPI specifications and event schemas
  • Authentication design per integration covering client, scopes and token lifetime
+ 2 more documents
who does it
Integration architectAPI developer (REST, GraphQL)Event streaming engineer (Kafka)
the story · api integration

From the first call to a setup your own team can run.

Here's what usually prompts a call about your API Integration, what we do about it and in which order, and where you end up.

  1. chapter 01 · where it hurts

    Why teams reach out

    • Integrations share one admin account and a password nobody wants to rotate.
    • A sync between the CRM and ERP fails quietly and someone notices days later.
    • The API trusts any signed-in caller. Swap the ID in the request and you get someone else's record back.
  2. chapter 02 · what we change

    How we solve it

    • Contract-first API design
    • Service-to-service authentication
    • Object-level authorization
    • Event-driven integration
    • CRM and ERP connections
    • Gateways and observability
  3. chapter 03 · how it runs

    Our approach

    • Map flows and ownership
    • Design contracts and auth
    • Build and test failure cases
    • Operate
  4. chapter 04 · where you end up

    What changes

    • Orders flow to the ERP as they change, and a failure alerts someone the same day.
    • Every route checks ownership and the tests prove it on each build.
    • Each change in Salesforce traces to one integration.
    • Integration inventory with system-of-record per field
what we do

Where we spend the hours

6 areas of work, each one done by an engineer who has run it in production.

  1. We agree OpenAPI contracts before code, with a versioning policy, consistent pagination and error responses in the RFC 9457 problem details format.

  2. We use OAuth 2.0 client credentials with one client per integration, and tokens are restricted to a single audience. Where the API supports it, tokens are bound to the caller with mTLS (RFC 8705) or DPoP (RFC 9449), following the OAuth security best practice in RFC 9700.

  3. Broken object level authorization is the first risk in the OWASP API Security Top 10 2023. Every request is checked against who owns the record as well as whether the token is valid.

  4. Queues and streams for work that can wait. Idempotency keys, dead-letter queues and replay mean we fix a failed message instead of losing it.

  5. Salesforce and Dynamics 365 integrations designed around each platform's API limits and data model, with a named integration user per connection and permissions limited to the objects it touches.

  6. Rate limits and authentication live at the API gateway, and tracing follows each request across hops. Alerts fire on error rates and queue depth, not on silence.

capability 01 / 06in production

Contract-first API design

We agree OpenAPI contracts before code, with a versioning policy, consistent pagination and error responses in the RFC 9457 problem details format.

capability 02 / 06in production

Service-to-service authentication

We use OAuth 2.0 client credentials with one client per integration, and tokens are restricted to a single audience. Where the API supports it, tokens are bound to the caller with mTLS (RFC 8705) or DPoP (RFC 9449), following the OAuth security best practice in RFC 9700.

capability 03 / 06in production

Object-level authorization

Broken object level authorization is the first risk in the OWASP API Security Top 10 2023. Every request is checked against who owns the record as well as whether the token is valid.

capability 04 / 06in production

Event-driven integration

Queues and streams for work that can wait. Idempotency keys, dead-letter queues and replay mean we fix a failed message instead of losing it.

capability 05 / 06in production

CRM and ERP connections

Salesforce and Dynamics 365 integrations designed around each platform's API limits and data model, with a named integration user per connection and permissions limited to the objects it touches.

capability 06 / 06in production

Gateways and observability

Rate limits and authentication live at the API gateway, and tracing follows each request across hops. Alerts fire on error rates and queue depth, not on silence.

typical situations

Situations we walk into

We pieced these together from API Integration situations that come up a lot. They're patterns. You won't find a specific client in them.

case file 01

Nightly CSV between Salesforce and the ERP that fails quietly

composite · not a client story
  1. Beforethe situation

    Orders move from Salesforce to the ERP through a nightly CSV export on an SFTP server. When a row fails, the job writes it to a log file nobody reads, and finance finds the gap at month-end.

  2. What we dothe work

    We replace the export with Salesforce Change Data Capture events feeding an integration service. Each message gets an idempotency key. Failures go to a dead-letter queue that raises an alert, and a small replay tool lets operations fix a message and send it again.

  3. Afterwhere you end up

    Orders flow to the ERP as they change, and a failure alerts someone the same day. Finance stops reconciling the two systems by hand at month-end.

case file 02

Partner API that returns any order when you change the ID

composite · not a client story
  1. Beforethe situation

    A partner-facing REST API validates the bearer token but not who owns the record. Changing the order ID in the path returns another partner's order, which a penetration test flagged as broken object level authorization.

  2. What we dothe work

    Add the ownership check in a shared authorization layer instead of per endpoint, and write tests that call every route with another partner's IDs. Issue each partner its own OAuth client with audience-restricted tokens, and log denied lookups for review.

  3. Afterwhere you end up

    Every route checks ownership and the tests prove it on each build. Attempts to read another partner's data show up in the logs instead of in the response.

case file 03

Eleven integrations signing in to Salesforce as one admin user

composite · not a client story
  1. Beforethe situation

    Eleven integrations sign in to Salesforce as one user with System Administrator and a password unchanged since go-live. Nobody can say which integration made a given change.

  2. What we dothe work

    We create one API-only integration user per integration, each with a permission set covering only the objects it touches. Each one moves to the OAuth client credentials or JWT bearer flow. Then the shared password gets rotated and retired.

  3. Afterwhere you end up

    Each change in Salesforce traces to one integration. Revoking one credential leaves the others running, and the audit trail finally answers who changed what.

case studies

API Integration case studies

All case studies
architecture

How integrations authenticate and move data between systems

Each integration gets its own OAuth client and requests audience-restricted tokens from the identity provider. Calls pass through a gateway that checks scopes and records traffic, and events carry changes between CRM, ERP and the data platform.

How integrations authenticate and move data between systems Each integration gets its own OAuth client and requests audience-restricted tokens from the identity provider. Calls pass through a gateway that checks scopes and records traffic, and events carry changes between CRM, ERP and the data platform. 01 · CALLERS 02 · CONTROL 03 · SYSTEMS client credentials scoped token user token API call REST REST change events load Custom application web · mobile · batch Integration service own OAuth client Authorization server Okta · Entra ID ·Auth0 API gateway scopes · rate limits · logs Event broker Kafka · Service Bus ·EventBridge Sf CRM Salesforce D365 ERP Dynamics 365 Data platform Snowflake
Read the diagram as text
  1. Integration service → Authorization server: client credentials
  2. Authorization server → Integration service: scoped token
  3. Custom application → API gateway: user token
  4. Integration service → API gateway: API call
  5. API gateway → CRM: REST
  6. API gateway → ERP: REST
  7. CRM → Event broker: change events
  8. Event broker → Data platform: load
how it runs

A typical engagement

We don't start a step until the last one has produced something you can check.

  1. step 01

    Map flows and ownership

    Settle which system owns each field and which way data moves. Then how fresh it has to be, and what happens when two systems disagree.

  2. step 02

    Design contracts and auth

    API contracts, event schemas, OAuth clients, scopes and token lifetimes written down per integration.

  3. step 03

    Build and test failure cases

    We test timeouts, duplicate messages, partial failures and expired tokens on purpose, before production finds them for us.

  4. step 04

    Operate

    Dashboards, alerts and runbooks, plus a credential rotation schedule your team can run.

you keep

What you're left with

We write these for your API Integration setup, and they're working documents. Your team should be able to keep things running from them long after we've gone.

  • inventory01

    Integration inventory with system-of-record per field

    yours to keep
  • code02

    OpenAPI specifications and event schemas

    yours to keep
  • design03

    Authentication design per integration covering client, scopes and token lifetime

    yours to keep
  • design04

    Error handling and replay design

    yours to keep
  • runbook05

    Monitoring dashboards and runbooks

    yours to keep
talent and delivery · api integration

Certified engineers, wherever you need them.

Some clients want a project team, some want a couple of engineers on theirs. Either works. Onsite, nearshore or offshore, with handovers across time zones that keep things moving.

Onsite

Engineers at your sites in the US

Nearshore

Overlapping hours with US teams

Offshore

Overnight progress on your backlog

All time zones

Coverage handed over across time zones

24-hour coverage · US Central time
OnsiteUS business hours
Nearshoreoverlapping US hours
Offshoreovernight progress
Combinedhandover, not hand-off
roles we staff
  • Integration architect
  • API developer (REST, GraphQL)
  • Event streaming engineer (Kafka)
  • API security engineer (OAuth, OIDC)
  • Integration support engineer
01Should we use an integration platform or write custom code?

It depends on volume, the number of systems and your team. An iPaaS or Power Automate suits many standard connectors with modest volume. Custom services suit high volume, complex logic or strict latency. Many estates use both, and we draw the line explicitly.

02Are API keys good enough for internal integrations?

They work, but they're usually long-lived, shared and hard to scope. OAuth client credentials with short-lived, audience-restricted tokens give you per-integration revocation and an audit trail for the same effort.

03How do you avoid hitting Salesforce API limits?

We'd batch high-volume loads, subscribe to change events so nothing polls, and watch API consumption per integration user. What works best depends on your Salesforce edition and data volumes.

04Can you secure AI agents that call our APIs?

Yes. An agent should call your APIs with its own OAuth client and scoped, delegated tokens, the same discipline as any other integration. Our generative AI work covers this for agents and MCP servers.

05We already run MuleSoft or Azure Integration Services. Can you work inside it?

Yes. We follow the patterns your integration platform already uses and add the authentication, idempotency and monitoring design on top. If the platform you have does the job, we're not going to sell you a new one.

related

Often paired with

Projects on API Integration usually end up touching one of these, so they're worth a look.

sources 5 sources linked last checked 2026-10-20 content fingerprint be31ef03
  1. 01OWASP API Security Top 10 (2023)owasp.org ↗
  2. 02IETF RFC 9700: Best Current Practice for OAuth 2.0 Securitydatatracker.ietf.org ↗
  3. 03IETF RFC 8705: OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokensdatatracker.ietf.org ↗
  4. 04IETF RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)datatracker.ietf.org ↗
  5. 05IETF RFC 9457: Problem Details for HTTP APIsdatatracker.ietf.org ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Tell us what you're running. We'll tell you what we'd do first.

A 30-minute working session with a senior engineer. No slides.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it