SKILL: api-integration
Purpose
Integrate external APIs safely (auth, retries, timeouts, error handling, logging) and expose them via a clean internal interface.
When to Use
- A system must call a third-party REST/WebSocket API.
- You need a reusable client module with predictable behavior.
- You must handle rate limits and transient failures.
Inputs
api_spec(required, object|string): base URL, endpoints, schemas, rate limits.auth_method(optional, enum:none|api_key|oauth|jwt|hmac).secrets_source(optional, string): where tokens/keys come from (env/secret manager).error_policy(optional, string): retry/backoff rules and non-retryable errors.
Steps
- Validate API contract and identify required headers/auth.
- Implement a client module:
- explicit base URL
- request timeouts
- retry with bounded backoff (only for safe/idempotent calls by default)
- rate limit handling
- Normalize errors into a stable internal shape.
- Add logging hooks (request id, endpoint, status, latency; never log secrets).
- Add tests:
- mocked responses for determinism
- at least one failure-path test
Validation
- Secrets are sourced only from configuration (not hardcoded).
- Retry policy is explicit and bounded.
- Errors are deterministic and observable.
Output
- Client module path(s)
- Config/env contract
- Usage example (internal call pattern)
Safety Rules
- Do not paste tokens/keys into code or logs.
- Do not rely on “best effort†network calls without timeouts.
- Avoid
curl | shor ad-hoc install scripts as part of integration.
Example
Integrate “VendorAPIâ€:
api_spec:{ base_url: "...", endpoints: ["/v1/items"] }- Output:
src/integrations/vendor/client.tswith retries and mocked tests.