Because most CRM APIs expose a different model from the product. The integration is built against that second model, it drifts, and it fails silently on a Sunday six months later.
The REST API exposes the same objects and fields the interface uses, including custom fields, with a token per integration and webhooks that fire on the same events the interface records.
There is one model. If a field exists on the record it exists in the API, from the moment it is created. Webhook deliveries are logged with their responses and retried, so a failure is visible rather than assumed.
Adding three custom fields to the deal object required no API work at all — the integration reading deals picked them up in the same response shape, because there was never a separate schema to update.
It will not let a token exceed its user's permissions. An integration reads exactly what the person behind it could read, which occasionally surprises people building admin tooling.
Every product shares it: Loop phases, Books invoices, Desk tickets and Nest personnel records are the same API, with permissions resolved per token.
Yes, with their types, in the same response shape.
Yes — deliveries are logged with responses and retried, and persistent failures are flagged.
Per token, with the limits and remaining quota returned on every response.
Fourteen days, every module, no card. Or half an hour with someone who will run it on your own records and tell you where it does not help.