Verify flow for a template
API v2 is in public beta: endpoints and fields can change before general availability. See the changelog
/back_in_stock/templates/{key}/verify_flowCosts 2 rate-limit points · Rate limits
Check that the Klaviyo or Postscript flow for one back-in-stock notification is set up, the same as the template page's Verify flow button. channel is "email" (Klaviyo email) or "sms" (Klaviyo SMS or Postscript, whichever is the SMS provider). Klaviyo is checked for a flow with the template's klaviyo_flow_name / klaviyo_sms_flow_name. Postscript has no flows API, so for Postscript this records your confirmation that the flow exists.
422 when the channel's provider is not Klaviyo/Postscript or is not connected. A flow Klaviyo cannot find is not an error: flow_verified is false and reason says why. The result also shows on GET /back_in_stock/templates/:key as email.klaviyo_flow_verified, sms.klaviyo_flow_verified and sms.postscript_flow_verified.
Also searched asverify klaviyo flowcheck my klaviyo flowverify postscript flowconfirm postscript flow setupis my klaviyo flow set up
Path parameters
keystringRequired
Headers
Idempotency-KeystringA fresh unique key for every write (a new UUID, say); reuse it only to retry that write. Keys are remembered for 1 hour: the same key and the same request within that hour returns the first result, with
Idempotent-Replayed: true, without running again; the same key with a different method, path or body is refused (422idempotency_key_reused); a retry while the first is still running gets 409idempotency_key_in_progress. Keys are per store. Server errors and rate limits are not kept, so their retry runs.
Request body
channelstringRequiredExample:emailOne ofemailsms
Errors
Missing or invalid X-Auth-Token.
The resource does not exist for this shop, or the action path is not registered.
An earlier request with the same Idempotency-Key is still running. Wait, then resend the same request with the same key.
The request failed validation.
Rate limited: cost-weighted per token (read 1, write 2; 360 points / 60s). Check Retry-After.
Every error has the same shape: see Errors.
curl -X POST "https://app.stoqapp.com/api/v2/external/back_in_stock/templates/{key}/verify_flow" \
-H "X-Auth-Token: $STOQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "email"
}'const res = await fetch("https://app.stoqapp.com/api/v2/external/back_in_stock/templates/{key}/verify_flow", {
method: "POST",
headers: {
"X-Auth-Token": process.env.STOQ_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"channel": "email"
}),
});
const data = await res.json();import os
import requests
res = requests.post(
"https://app.stoqapp.com/api/v2/external/back_in_stock/templates/{key}/verify_flow",
headers={"X-Auth-Token": os.environ["STOQ_API_KEY"]},
json={
"channel": "email"
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://app.stoqapp.com/api/v2/external/back_in_stock/templates/{key}/verify_flow")
req = Net::HTTP::Post.new(uri, "X-Auth-Token" => ENV["STOQ_API_KEY"], "Content-Type" => "application/json")
req.body = {
channel: "email"
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body){
"job_id": "job_a1b2c3",
"status_url": "/api/v2/external/jobs/job_a1b2c3"
}{
"errors": [
"Invalid API key"
],
"code": "auth_invalid",
"details": [
{
"code": "auth_invalid",
"message": "Invalid API key",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"Offer not found"
],
"code": "not_found",
"details": [
{
"code": "not_found",
"message": "Offer not found",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"A request with this Idempotency-Key is still running"
],
"code": "idempotency_key_in_progress",
"details": [
{
"code": "idempotency_key_in_progress",
"message": "A request with this Idempotency-Key is still running",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"name is required"
],
"code": "validation_failed",
"details": [
{
"code": "validation_failed",
"message": "name is required",
"path": null,
"value": null,
"expected": null
}
]
}{
"errors": [
"Rate limit exceeded"
],
"code": "rate_limited",
"details": [
{
"code": "rate_limited",
"message": "Rate limit exceeded",
"path": null,
"value": null,
"expected": null
}
]
}