generated: '2026-08-13' method: searched source: - https://integrations.sendhub.com/SendHub-API-v1-Documentation.html - https://sendhub.com/developer/ - openapi/sendhub-openapi-original.yml authentication: styles: - apiKey (username + api_key as query params) - HTTP Basic (username + password/api_key) ref: authentication/sendhub-authentication.yml idempotency: supported: false note: No idempotency-key header/param documented. upsertContact (POST) and bulkUpsertContacts (PATCH) provide upsert-by-number semantics but are not request-idempotency keys. pagination: style: offset params: - limit - offset response_fields: - meta.offset - meta.limit - meta.previous - meta.next note: List endpoints return a meta object with offset/limit and previous/next links. versioning: scheme: uri-path current: v1 note: All endpoints under /v1/. Docs marked Beta. error_envelope: ref: errors/sendhub-error-codes.yml fields: - message - code - error - devMessage - moreInfo rate_limiting: ref: rate-limits/sendhub-rate-limits.yml signals: - HTTP 429 (too many requests; retry delay carried in the body field timeLeft, e.g. "0:00:30") - HTTP 420 (monthly plan API limit reached, or the plan does not include API access) headers: none headers_note: >- No RateLimit-*/X-RateLimit-*/Retry-After headers are documented or observed; a client must parse SendHub's JSON error envelope to back off. published_limits: false note: >- The developer page states "API access available on our custom plans" while the pricing page lists "API Integration" on every published tier. Both statements are SendHub's own, quoted 2026-08-13. resource_uris: note: Objects carry resource_uri fields (e.g. /v1/contacts/{id}) for hypermedia-style linking.