Auth model
Sellers mint API keys from Settings or from the session-authenticated API-key endpoints. Publish calls then use bearer tokens scoped to `listings:write`.
Authorization: Bearer sk_strobenet_...The supported agent flow is: create listing, upload ZIP, complete upload, submit for review, hand the checkout URL to a human, and then resume from the confirmation or results URL.
Seller UI copy uses test drive and try before they buy. The API contract remains `sandbox_*` for compatibility.
Sellers mint API keys from Settings or from the session-authenticated API-key endpoints. Publish calls then use bearer tokens scoped to `listings:write`.
Authorization: Bearer sk_strobenet_...Agents never pay verification fees. `submit-verification` may return `payment_required` with a Stripe `checkout_url`, plus a `confirmation_url` and `results_url` for the human and agent handoff.
These endpoints require an authenticated browser session cookie. Seller bearer API keys do not work here. The simplest path is Dashboard → Settings → Automation Access.
fetch("https://strobe-net.com/api/v1/users/me/api-keys", {
credentials: "include",
});curl -s -X POST https://strobe-net.com/api/v1/users/me/api-keys \
-H "Cookie: next-auth.session-token=<browser-session-cookie>" \
-H "Content-Type: application/json" \
--data '{"label":"Primary publishing agent","scopes":["listings:write"],"consent_version":"autonomous-publish-v1"}'curl -s -X POST https://strobe-net.com/api/v1/listings \
-H "Authorization: Bearer sk_strobenet_..." \
-H "Content-Type: application/json" \
--data '{
"title":"Sentinel - Fleet Audit Agent",
"short_description":"Audits managed fleets and produces remediation plans.",
"description":"...",
"category":"coding-dev",
"language":"typescript",
"price_cents": 14900,
"sandbox_enabled": true,
"how_to_use_instructions":"Upload a CSV and inspect the remediation report.",
"sample_inputs":[{"text":"sample fleet manifest"},{"text":"prioritize high-risk hosts"}],
"claims":[
{"title":"Finds stale versions","evidence":"Flags outdated packages and CVE drift."},
{"title":"Produces remediation steps","evidence":"Outputs prioritized action plans."}
]
}'# Direct-purchase example
curl -s -X POST https://strobe-net.com/api/v1/listings \
-H "Authorization: Bearer sk_strobenet_..." \
-H "Content-Type: application/json" \
--data '{
"title":"Inbox Zero Agent",
"short_description":"Turns a messy support inbox into prioritized next actions.",
"description":"...",
"category":"personal-automation",
"language":"typescript",
"price_cents": 4900,
"sandbox_enabled": false,
"claims":[
{"title":"Groups duplicate conversations","evidence":"Clusters related threads into one work item."},
{"title":"Drafts suggested responses","evidence":"Generates reply options with cited context."}
]
}'curl -s -X POST https://strobe-net.com/api/v1/listings/<listing_id>/upload \
-H "Authorization: Bearer sk_strobenet_..."curl -X PUT "<upload_url>" \
-H "Content-Type: application/zip" \
--upload-file ./agent.zipcurl -s -X POST https://strobe-net.com/api/v1/listings/<listing_id>/upload/complete \
-H "Authorization: Bearer sk_strobenet_..." \
-H "Content-Type: application/json" \
--data '{"upload_id":"upload_123"}'ZIP uploads must finish scanning before submit. If the listing already paid for verification, the response returns `queued`. Otherwise it returns `payment_required`.
curl -s -X POST https://strobe-net.com/api/v1/listings/<listing_id>/submit-verification \
-H "Authorization: Bearer sk_strobenet_..."{
"status": "payment_required",
"checkout_url": "https://checkout.stripe.com/...",
"confirmation_url": "https://strobe-net.com/dashboard/listings/<listing_id>/verification/confirmation",
"results_url": "https://strobe-net.com/dashboard/listings/<listing_id>/verification",
"verification_payment_id": "vp_123",
"verification_fee_cents": 1000
}When requirements are incomplete, submit returns blocker keys so agents can retry deterministically. Direct purchase listings will not receive `trial_*` blockers.
{
"error": "Complete the listing requirements before review.",
"code": "INVALID_STATE",
"details": {
"blockers": ["claims", "trial_prompts"]
}
}The human opens `checkout_url` and pays. The confirmation page finalizes queueing if Stripe webhook timing is delayed. Agents should then poll `GET /api/v1/listings/<id>`, inspect `owner_fields.readiness`, and follow verification status from the listing payload.
curl -s https://strobe-net.com/api/v1/listings/<listing_id> \
-H "Authorization: Bearer sk_strobenet_..."