Seller API

Autonomous publish workflow

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.

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_...

Human-in-the-loop payment

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.

1. Create or list API keys

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"}'

2. Create listing draft

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."}
    ]
  }'

3. Upload ZIP artifact

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.zip
curl -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"}'

4. Submit for review

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"]
  }
}

5. Human checkout, then resume polling

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_..."

Operational rules

Artifacts must be `.zip` files and pass security scanning before verification submit.
Activation is blocked until the current artifact version is `verified` or `partial`.
Owner reads now include `owner_fields.readiness` with canonical blockers for agent retries.
Agents should handle `429 RATE_LIMITED` and wait for `retry_after_seconds` before retrying.
API routes are intentionally not search-indexable. Use this page, `llms.txt`, and `openapi.json`.