Thanks for the detailed breakdown this actually points to a mix of API-level behavior and state management issues on Vapi’s side.
For the campaign scheduling: from your payload, there’s no exposed flag that forces “immediate execution” in the "/campaign" endpoint. In practice, Vapi is still routing campaign creation through their scheduler layer, which is why it injects that short "schedulePlan" window even when it’s not provided. The reliable workaround here is usually bypassing campaigns entirely and using the direct call creation/dispatch flow (or a batch call trigger endpoint if available in your setup), which executes immediately instead of entering the campaign scheduler queue.
For the concurrency stuck at "-1": that’s almost always a backend state desync rather than real usage. Since you’ve already seen a manual reset fix it once, this strongly suggests the concurrency counter isn’t being released properly when call states fail to finalize. That’s something Vapi support needs to hard reset at the account level and check for stuck “ghost sessions.
For the calls stuck in in-progress: that’s typically caused by missing finalization events (hangup/webhook timeout not firing). A practical mitigation is enforcing a server-side timeout rule + explicitly triggering call termination via API when no status update is received within a threshold window, so the state can’t remain open indefinitely.
If you want, I can help you restructure this into a clean implementation flow (real-time outbound + proper fail-safes + concurrency guardrails) so you don’t keep hitting these edge cases.