Access runs through a consumer key and consumer secret, generated per WordPress user under WooCommerce's REST API settings, with read, write, or read/write permissions attached to that pair. Over HTTPS it's straightforward Basic Auth; a handful of older or non-HTTPS setups still rely on OAuth 1.0a signing instead, which is more work to implement correctly and worth avoiding if you have any say in how the site's hosted.
The endpoints map closely to what you'd see in the admin screen: `/products`, `/orders`, `/customers`, `/coupons`, `/reports`, each supporting the usual list, get, create, update, and delete operations with pagination built in. There's also a separate, newer Store API that powers the block-based cart and checkout on the front end. It's unauthenticated by design and meant for the shopper's own browser session, not for a server-to-server integration, so it's the wrong tool if what you're building is a backend sync.
Custom data rides along as `meta_data`, key-value pairs attached to a product or order that don't fit WooCommerce's standard fields. That's usually where a business's own order numbers, a custom product attribute, or a flag from another system ends up living once an integration's been running a while.