
When digital agencies deliver bespoke web applications, customer portals, or enterprise tools, the code in production rarely stands alone. An agency-built dashboard might combine a weather feed, a mapping library, a shipping-rate calculator, a payment gateway, and an authentication provider.
This modular approach speeds up delivery, but it creates a hidden risk: the sub-processor renewal chain. Every external service a build depends on has its own credentials, pricing plan, API version, and sub-vendors. Any of them can change on a schedule the agency doesn’t control.
When a token expires, a free tier is retired, or an endpoint is shut down, client software can fail with no obvious error. For agencies on ongoing retainers, these failures erode trust and can breach SLAs. They also turn planned maintenance work into emergency firefighting.
This guide covers how to inventory third-party dependencies, monitor them, degrade gracefully when they fail, and allocate responsibility for them in contracts.
A note on terminology. “Sub-processor” has a precise legal meaning: a vendor engaged by a data processor to handle personal data on a controller’s behalf. This article also uses the word loosely for any external API or SaaS service a custom build depends on. Where the legal meaning matters, the text says so.
---
1. The Anatomy of the Sub-Processor Renewal Chain
What Is a Sub-Processor?
Under the GDPR, a processor may not engage another processor without the controller’s prior specific or general written authorisation. Where the authorisation is general, the processor must tell the controller about intended additions or replacements so the controller can object.
An agency hosting or handling a client’s customer data is often a processor. Any third-party API that touches that data then becomes a sub-processor, with real contractual consequences.
SOC 2 reports use different vocabulary. They refer to subservice organizations, which are typically handled under the “carve-out” method, where the report excludes the vendor’s controls but discloses the reliance. Under that method, monitoring the vendor remains the reporting organization’s job.
In engineering terms, the useful definition is broader: any external API, SaaS microservice, or cloud utility on which application logic depends.
Three Layers of Dependency
A typical custom build has several layers:
- The core application layer. Custom Node.js, Python, or PHP code written by the agency.
- The first-tier API layer. Services the agency or client contracts directly, such as Stripe for payments, Twilio for messaging, or Mapbox for maps.
- The deep-tier layer. Services that your first-tier vendors themselves rely on. For example, Mapbox’s published sub-processor list includes Amazon Web Services as its hosting provider. Most first-tier vendors publish similar lists.
You cannot control the deep tier, but you can read each vendor’s sub-processor list and subscribe to its change notifications. Many vendors, Mapbox included, offer update subscriptions.
Where the Chain Breaks
Failures in this chain rarely produce clean error messages. They usually arrive in one of three ways.
Credential expiry and revocation
- OAuth tokens, API keys, and service-account credentials can lapse when rotation scripts fail or reminders are missed.
- Some expiry rules are surprising. Google OAuth refresh tokens issued to external apps left in “Testing” status expire after 7 days, with an exception for apps requesting only basic sign-in scopes.
- In production, Google refresh tokens are generally invalidated if unused for six months.
Pricing and plan changes
- Google Maps Platform replaced its recurring $200 monthly credit with per-SKU free usage thresholds on March 1, 2025. Bills changed for some customers depending on their usage mix.
- Twilio SendGrid retired its Free Email API and Free Marketing Campaigns plans in late May 2025. Free accounts got a 60-day transition, after which sending was paused for them. Contacts beyond 100 were deleted and could not be restored by upgrading.
- OpenWeather closed One Call API 2.5 in June 2024. The replacement, One Call API 3.0, is a separate subscription. It includes 1,000 free calls per day and requires a payment card for usage beyond that.
Endpoint and version retirement
- FedEx’s legacy SOAP-based Web Services were retired on June 1, 2026, and integrations must now use FedEx REST APIs.
- An earlier phase retired the Tracking, Address Validation, and Postal Codes WSDLs in August 2024.
- Custom integrations had to move to REST, which uses different credentials and OAuth 2.0 authentication, and to MFA-protected developer accounts.
- Anything that missed the cutoff stopped producing rates and labels.
When any of this breaks inside a client’s custom build, the client rarely blames the vendor. They blame the agency that built the software.
---
2. Establishing an Agency Inventory: The API Bill of Materials
You cannot monitor what you haven’t documented. Many agencies rely on tribal knowledge about client stacks. A developer who left months ago may have been the only person who knew why a shipping API key was set the way it was.
Building the API Bill of Materials
This article calls the inventory an API Bill of Materials (ABoM). The name is not an industry standard, but the idea borrows from software supply chain practice.
Standard formats already cover most of it. CycloneDX can describe “services” alongside software components. Per its documentation, it records endpoint URIs, authentication requirements, trust-boundary crossings, data flows, and dependency relationships. It also supports BOMs made up entirely of services, which it calls SaaSBOMs. Agencies can adopt that format rather than invent their own.
For each integration, a useful ABoM entry records:
- Service name and vendor. For example, the OpenWeather One Call API 3.0, published by OpenWeather.
- Contract and billing owner. Agency account or direct client billing, and which payment method backs it.
- Authentication method. OAuth 2.0, bearer token, API key, or HMAC signature.
- Credential expiry and rotation cycle. The actual expiry date where the vendor enforces one, plus where the secret is stored and who can rotate it.
- API version and endpoints. Including the version pinned in code and the vendor’s published deprecation or sunset policy.
- Plan tier and quota. Free-tier limits, overage pricing, and who gets notified near the limit.
- Data shared. Whether personal data crosses the trust boundary, which determines whether the vendor is a sub-processor in the legal sense.
- Fallback behavior. What the UI does if the API fails.
- Vendor links. The status page, changelog, and sub-processor list, with a note on whether you are subscribed to updates.
Never store secrets in the ABoM itself. It should record where a credential lives, not the credential.
Integrating the ABoM into Client Retainers
Agency retainers should go beyond an hourly bucket for bug fixes. Consider defining dependency monitoring and API change management as a distinct line of scope with its own fee, so that proactive oversight has commercial backing rather than relying on goodwill.
---
3. Technical Strategies for Deep-Tier API Logging and Health Checks
Relying on user complaints to discover a failed third-party API is a poor position for a professional agency. Telemetry should tell your team that an integration is degrading before the client opens a ticket.
Synthetic Health-Check Probes
A basic HTTP uptime monitor confirms that a URL responds. Tools like UptimeRobot also offer keyword and response checks, which help. But a simple monitor pointed at your homepage will not tell you whether the application can still talk to its payment, shipping, or mapping vendor.
The reliable pattern is a synthetic health-check endpoint inside the application. It makes a lightweight, authenticated call to the vendor and reports the result. Your uptime tool then monitors that endpoint on a schedule.
Three cautions apply before you deploy it:
- Mind the quota. A check every 15 minutes is 96 calls per day. Against a vendor that meters usage, such as OpenWeather’s 1,000 free calls per day, that adds up across many client apps. Use a vendor’s free “ping” or status endpoint where one exists, and avoid billable calls.
- Protect the endpoint. Don’t leave it public and unauthenticated. Anyone who finds it can trigger outbound vendor calls on your quota.
- Keep the response generic. Return a minimal status to the monitor and log the details internally.
// Synthetic health check in a Node.js / Express custom build.
// The vendor URL is a placeholder; use the vendor's real status or no-cost endpoint.
const express = require('express');
const axios = require('axios');
const router = express.Router();
router.get('/internal/health/shipping', requireMonitorToken, async (req, res) => {
const startTime = Date.now();
try {
const response = await axios.get('https://api.shippingvendor.example/v1/ping', {
headers: { Authorization: `Bearer ${process.env.SHIPPING_API_KEY}` },
timeout: 5000
});
const latencyMs = Date.now() - startTime;
// Capture deprecation signals if the vendor sends them (see RFC 9745 / RFC 8594)
const deprecation = response.headers['deprecation'];
const sunset = response.headers['sunset'];
if (deprecation || sunset) {
console.warn(JSON.stringify({
level: 'warn',
service: 'shipping-api',
event: 'DEPRECATION_SIGNAL',
deprecation,
sunset
}));
}
return res.status(200).json({ status: 'healthy', latencyMs });
} catch (error) {
// Log details internally; return only a generic status to the caller
console.error(JSON.stringify({
level: 'error',
service: 'shipping-api',
event: 'HEALTH_CHECK_FAILURE',
httpStatus: error.response?.status,
message: error.message,
timestamp: new Date().toISOString()
}));
return res.status(503).json({ status: 'unhealthy' });
}
});
module.exports = router;Watch for Machine-Readable Deprecation Signals
Some vendors announce retirements in HTTP headers. RFC 9745, published in March 2025, defines a Deprecation response header. It can be paired with the Sunset header from RFC 8594, which indicates when a resource is likely to become unresponsive.
Where a vendor sends these headers, logging them turns an unannounced retirement into an alert. Many vendors send neither, so this supplements reading changelogs and does not replace it.
Structured Logging with Useful Context
Generic catch blocks that log Error: API Request Failed are useless for diagnosis. Adopt structured JSON logging across builds. Every log entry involving a third-party call should capture:
- Timestamp
- Service identifier, such as
service: weather-api - HTTP status code, such as
401,429, or504 - Pinned API version and vendor request ID, if the vendor returns one
- Latency
- A hash or reference for the request, so you can trace a failing call without logging personal data
- A truncated, redacted copy of the vendor’s error message. Vendor error bodies can echo input data, so don’t store them blindly.
For 429 responses, honor the vendor’s Retry-After header when present, and log the retry delay.
Route these logs to a central observability stack, such as Datadog, New Relic, Grafana Loki, or AWS CloudWatch, with alerting rules attached.
---
4. Automated Alerting and Fallback Architecture
Detecting a failure is half the job. The application should also limit the damage while the vendor is down.
Graceful Degradation
If a dashboard relies on a real-time shipping calculator and that API fails during a flash sale, the checkout page must not crash. Use circuit breakers and fallback states. A circuit breaker stops calling a failing dependency once errors cross a threshold, returns a fallback immediately, and retries periodically to see whether the dependency has recovered. Mature libraries exist for most stacks, such as opossum for Node.js.
Common fallback patterns:
- Stale-data caching. Serve the last successful response with a visible notice, for example: “Displaying cached shipping rates. Live calculation is temporarily delayed.” This suits data where slightly old values are acceptable. It is a poor fit for payment authorization.
- Static fallback defaults. If a weather widget returns a
500, render a neutral default or hide the widget rather than letting an unhandledTypeErrorbreak the page. - Secondary provider failover. For critical workflows such as address validation, a redundant second vendor can take over after repeated consecutive health-check failures. This adds cost and integration work, so reserve it for workflows where downtime is costly.
Alert Escalation Tiers
Not every failure justifies waking an engineer at 3:00 AM. A tiered scheme linked to your retainer SLAs might look like this:
- P3 (low). Deprecation warnings, rate-limit utilization approaching a threshold such as 80% of a plan’s quota, or isolated warnings. These go to a project dashboard for weekly review.
- P2 (medium). Intermittent failures or elevated latency affecting secondary features. These go to a Slack channel monitored during business hours.
- P1 (high). An outage of a core transactional dependency, such as the payment gateway, ERP sync, or inventory feed. These page the on-call engineer through a service like PagerDuty.
Thresholds and tier names should be tuned to each client’s SLA.
---
5. Contractual and Legal Guardrails for Agencies
Technical monitoring cannot, on its own, protect an agency from liability when a vendor breaks a client’s operations. Master Services Agreements (MSAs), Statements of Work (SOWs), and retainers should address third-party dependency risk directly.
This section is general information, not legal advice. Whether liability disclaimers are enforceable varies by jurisdiction and contract, so have counsel review the language.
Statement of Work Provisions
- Third-party dependency clause. List the third-party services integrated into the build, and state how responsibility is allocated for interruptions, pricing changes, or deprecations on the vendor’s side.
- API change management. Clarify whether adapting code to a vendor’s breaking change is covered by warranty or falls under a separate maintenance retainer. The FedEx migration is a useful reference point, because it required new credentials, new authentication, and re-testing, which is substantial work rather than a configuration tweak.
- Direct billing ownership. Where possible, have the client hold the contract and payment method for third-party accounts such as AWS, Mapbox, or SendGrid, with the agency given documented delegated access. If a card on file lapses, the contract then places that responsibility on the client. Recognize that reputational risk remains with the agency regardless, so pair this clause with monitoring and renewal reminders.
Privacy and Sector Rules That Flow Down
- GDPR. If your client is a controller and you act as a processor, adding a new API vendor that handles personal data can require the client’s authorization under Article 28. Agree on a process for adding or replacing vendors before launch, not after.
- Financial-sector clients in the EU. The Digital Operational Resilience Act (DORA) has applied since January 17, 2025. It requires in-scope financial entities to maintain a register of contractual arrangements with ICT third-party providers, covering subcontracting chains. Expect such clients to ask agencies for dependency inventories and to push contractual requirements down to them.
- SOC 2 clients. Clients with SOC 2 programs will need evidence that you monitor the vendors your build relies on.
---
6. Best Practices Checklist for Agency Engineering Leads
For every active and upcoming client build:
- Establish an ABoM. Record every third-party API, its owner, plan tier, authentication method, credential expiry, and pinned version. Use a standard format such as CycloneDX services where practical.
- Keep secrets out of code. Use a secrets manager such as AWS Secrets Manager, which supports scheduled rotation, or Doppler. Note that rotation of third-party vendor keys usually needs custom integration, and that CI secret stores like GitHub Actions secrets store values but don’t rotate them. Track expiry dates separately where the tooling can’t.
- Build synthetic health probes. Test downstream connectivity on a schedule, authenticated, quota-aware, and returning minimal output.
- Enforce structured JSON logging. Capture vendor status codes, API version, latency, and redacted error messages.
- Log deprecation signals. Capture
DeprecationandSunsetheaders when present, and subscribe to each vendor’s changelog and sub-processor update notices. - Implement circuit breakers and fallbacks. Degrade with cached data or safe defaults, and decide per workflow where stale data is acceptable.
- Update contracts. Add dependency, billing-ownership, and change-management clauses, and agree on a vendor-addition process for personal data.
- Schedule quarterly audits. Review every integration for upcoming retirements, pricing changes, credential expiries, and sub-processor updates.
---
Conclusion
Custom builds give clients flexibility, but they also tie business-critical operations to external supply chains the agency doesn’t control. Recent history shows how real the risk is. Google Maps restructured its free usage, SendGrid ended its free plan, OpenWeather replaced a whole API generation, and FedEx switched off its legacy platform.
Agencies can reduce that exposure with a documented inventory, monitoring that tests real integrations, graceful fallbacks, and contracts that allocate responsibility clearly. Third-party APIs are not set-and-forget components. They are ongoing dependencies that need an owner, a review schedule, and a plan for the day they change.