Connector

Muse calls see2sell. Muse reads the speak field verbatim. It must not rewrite prices or add an appraisal.

API key (local mock)

s2s_live_demo

Health

GET https://see2sell.grok.me/api/v1/health → { "ok": true, "tape": "demo" }

Glance

POST https://see2sell.grok.me/api/v1/glances
Authorization: Bearer s2s_live_demo
Idempotency-Key: aisle-001

{ "utterance": "What's this gone for?", "hint": "Rolex Submariner 16610", "surface": "glasses" }

Rules

  • At most three comps, newest first.
  • Each production comp carries licensed true, or status is no_tape.
  • speak is required on every status.
  • No estimate, worth, fair value, or offer-to-buy field.
  • Camera frames are for the active glance only.
  • Publishing a listing requires confirmation on phone.

Open fixtures

OpenAPI 3.1

openapi: 3.1.0
info:
  title: see2sell
  version: 0.1.0
  description: Completed-sale lookup. Recent eBay sold prices when live lookups are on (typical price, range, recent sales), otherwise a demo tape. Caveats and a speak string on every response. Comps are facts. No appraisal. No offer to buy.
servers:
  - url: https://see2sell.grok.me/api/v1
paths:
  /health:
    get:
      summary: Liveness
      responses:
        "200":
          description: ok
  /glances:
    post:
      summary: Run a glance
      security:
        - bearerAuth: []
      parameters:
        - in: header
          name: Idempotency-Key
          description: Retries with the same key replay the first response instead of running a new glance.
          schema: { type: string, maxLength: 200 }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                utterance: { type: string, maxLength: 300 }
                hint: { type: string, maxLength: 200 }
                image_b64: { type: string, description: "JPEG or PNG frame, base64 or data URL. Identified by the vision model; the hint is optional extra context." }
                image_url: { type: string, format: uri }
                locale: { type: string }
                surface: { type: string, enum: [glasses, muse_app, whatsapp, web] }
      responses:
        "200":
          description: Glance with speak field Muse must read verbatim. status no_tape means the photo was identified but the item has no sales on the tape.
        "400":
          description: Invalid request body
        "401":
          description: Missing or invalid API key
        "413":
          description: Request body too large
        "429":
          description: Rate limited (30 glances per minute per key); see Retry-After
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer