Idempotency
Request keys make Probably's write tools safe to retry: the same key answers with the first result.
Networks fail mid-call, and agents retry. Probably's write tools take a request key so that a retry answers with what the first call did instead of doing it twice.
Request keys
Tools whose repeat would do something twice take a requestKey: create_space, save_persona, save_product, prepare_audience_research, save_segments, plan_campaign, prepare_campaign_batch, prepare_campaign_openings, import_ad_results, plan_next_batch, stop_video, share_video, send_message, prepare_video, research, brainstorm, write_script, review, generate_clip, voice, and storyboard. The HTTP API reference lists it among each one's fields.
- Use a new key for each thing you mean to do, such as a UUID, 8 to 64 characters of letters, digits and
.,_,:or-. - Send the same key again, and the tool answers with the first call's result, even when the first call's answer never reached you.
- The same key with other input, or for another tool, is refused as
invalid, so a bug that reuses keys can't silently return the wrong thing. - Keys belong to the connection that sent them.
Repeat-safe by nature
Some tools are safe to repeat without a key, because doing them again changes nothing more: approving a delivery, discarding a change, and confirm_spend, which starts its work once however often it is called. The MCP tool reference marks these with the idempotent hint.
revoke_share isn't: a revoked link reads as missing, so a repeat answers not-found. Treat that as done.
What to retry
- Retry a network failure, a timeout, a
failed(500) or anunavailable(503), with the same request key, after a backoff. - Wait, then retry a
rate-limited(429), afterretryAfterSeconds. - Don't retry unchanged any other refusal: fix the input, read the current state, or ask the person. Errors says what each one means.
Messages to Looky (send_message) are the one exception: the message is sent before its key's answer is recorded, so a retry racing the first call, or one after a failure between the two, can send it twice. A message spends nothing; check the video's messages before sending again.