The API exposes most of what you'd expect: creating and reading invoices and bills, pulling bank transactions and contacts, posting manual journals, and querying reports. It's organized around OAuth 2.0 scopes, so an integration requesting access to accounting data doesn't automatically get payroll data or the ability to void transactions, which matters if you're building something a client or a third party will trust with their books.
You get an API key and client credentials through Xero's developer portal, where the docs, a request explorer, and rate-limit details all live. Webhooks are available too, so an integration can react when an invoice gets paid or a contact changes, instead of polling the API on a schedule and hoping nothing slipped through between checks.
What the public API doesn't reach is a short, specific list: a handful of newer report customizations, certain org-level admin settings, and some UI-only configuration screens. For the rare case where a workflow genuinely needs one of those, we handle it with scripted browser automation against the Xero interface itself rather than forcing a workaround through an endpoint that was never built for the job.