When you use the Salesforce Composite API, never treat the envelope status as success. Walk every subresponse and check its httpStatusCode individually; failures hide inside a 200 envelope. Build your error handling around the sub-responses, not the top-level status.

Context: Salesforce API notes (copado-agent-skills, documenting real API behavior): the Composite and Composite Graph APIs return 200 on the envelope even when individual sub-requests fail. A 200 says nothing about the sub-requests; you must iterate them and check each httpStatusCode.