Any operation that can take more than a moment — building a store, publishing, attaching a domain, bulk imports, sending a campaign, syncing ads — is asynchronous. It returns 202 with a job reference instead of blocking:

Polling

Read a job’s live status — non-terminal jobs are re-resolved against the underlying subsystem on each read:
Or block until it finishes (server-side long-poll, up to timeout_seconds, max 600):
List recent jobs for the merchant (filter by status, kind):

Status values

A terminal job’s result carries the payload you want — e.g. project_id, production_url, created product ids, or send stats.
From an agent, every async tool is followed by dtc_job_wait. See the Playbook.