{
  "openapi": "3.1.0",
  "info": {
    "title": "Seenly Video Pitch Kit API",
    "version": "0.1.0",
    "summary": "Resume → recruiter-ready 45–60 s video-pitch script (+15 s cut, headline, strengths, captions).",
    "description": "Turns caller-supplied resume content into a first-person video-pitch script using the Seenly hook/value/proof/close method. The API only uses content you send; it never fetches URLs or scrapes LinkedIn or any other site. Nothing is stored after the response. Pricing: $0.50 in USDC per successful call (x402 on Base mainnet); Card payments: coming soon. Current status: LIVE: real USDC payments. Unpaid requests get HTTP 402 with an x402 v2 challenge (PAYMENT-REQUIRED); input is validated before any payment is requested, and x402 settles only after a successful response.",
    "contact": {
      "name": "Seenly",
      "url": "https://www.seenly.live"
    },
    "x-guidance": "POST https://seenly-pitch-kit.vercel.app/api/script with JSON {\"resumeText\": \"<plain-text resume, 200-20000 chars>\", \"targetRole\": \"optional\", \"tone\": \"confident|warm|energetic|executive|casual\"} or {\"file\": {\"filename\": \"cv.pdf\", \"base64\": \"...\"}} for PDF/DOCX, or multipart/form-data with a file field. Returns a recruiter-ready first-person 45-60 s video-pitch script (hook/value/proof/close), a 15 s cut, a headline, 3 key strengths with evidence and timed captions. Payment: the unpaid call returns HTTP 402 with an x402 v2 PAYMENT-REQUIRED header; sign it with any x402 client and retry with PAYMENT-SIGNATURE. Bad input is rejected with 4xx before payment is requested, and x402 settles only after a successful response (failed calls are not charged). Only send the caller's own resume content: the service never fetches URLs or scrapes LinkedIn, and stores nothing after the response."
  },
  "servers": [
    {
      "url": "https://seenly-pitch-kit.vercel.app"
    }
  ],
  "x-pricing": {
    "status": "live",
    "tiers": [
      {
        "operationId": "createPitchScript",
        "unit": "call",
        "priceUsdc": "0.50",
        "card": "coming soon",
        "rails": [
          {
            "protocol": "x402",
            "version": 2,
            "scheme": "exact",
            "network": "eip155:8453",
            "networkName": "Base mainnet",
            "asset": "USDC",
            "assetAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
            "amount": "500000",
            "priceUsd": "0.50",
            "payTo": "0xeE6239F3E17bEBe5e89F21F29D74D68CAa0d78CE",
            "facilitator": "Coinbase CDP (gas sponsored; payer needs no ETH)",
            "header": "PAYMENT-SIGNATURE"
          }
        ]
      },
      {
        "operationId": "createPitchVideo",
        "unit": "call",
        "priceUsd": "4.99",
        "status": "not yet available"
      }
    ]
  },
  "paths": {
    "/api/script": {
      "get": {
        "operationId": "describePitchScriptEndpoint",
        "summary": "Free: short description of the POST endpoint",
        "security": [],
        "responses": {
          "200": {
            "description": "Endpoint hint",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createPitchScript",
        "summary": "Generate a video-pitch script from a resume",
        "description": "Send exactly one of resumeText or a file (PDF/DOCX). Limits: resume text 200–20000 chars; file ≤ 3 MB; PDF ≤ 8 pages; 10 requests/minute per client. Typical latency 5–20 s.",
        "tags": [
          "Careers"
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.50"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "x-seenly-payment-rails": {
          "environment": "live",
          "cards": "coming soon",
          "rails": [
            {
              "protocol": "x402",
              "version": 2,
              "scheme": "exact",
              "network": "eip155:8453",
              "networkName": "Base mainnet",
              "asset": "USDC",
              "assetAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
              "amount": "500000",
              "priceUsd": "0.50",
              "payTo": "0xeE6239F3E17bEBe5e89F21F29D74D68CAa0d78CE",
              "facilitator": "Coinbase CDP (gas sponsored; payer needs no ETH)",
              "header": "PAYMENT-SIGNATURE"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "resumeText": {
                    "type": "string",
                    "minLength": 200,
                    "maxLength": 20000,
                    "description": "Plain-text resume or profile content supplied by the caller."
                  },
                  "file": {
                    "type": "object",
                    "required": [
                      "base64"
                    ],
                    "properties": {
                      "filename": {
                        "type": "string",
                        "example": "resume.pdf"
                      },
                      "contentType": {
                        "type": "string",
                        "example": "application/pdf"
                      },
                      "base64": {
                        "type": "string",
                        "contentEncoding": "base64",
                        "description": "PDF or DOCX bytes, base64-encoded (data: URLs accepted)."
                      }
                    }
                  },
                  "targetRole": {
                    "type": "string",
                    "maxLength": 120,
                    "description": "Optional role the pitch should aim at.",
                    "example": "Senior Product Designer"
                  },
                  "tone": {
                    "type": "string",
                    "enum": [
                      "confident",
                      "warm",
                      "energetic",
                      "executive",
                      "casual"
                    ],
                    "default": "confident"
                  }
                },
                "oneOf": [
                  {
                    "required": [
                      "resumeText"
                    ]
                  },
                  {
                    "required": [
                      "file"
                    ]
                  }
                ]
              },
              "examples": {
                "text": {
                  "value": {
                    "resumeText": "Jordan Rivera — Registered Nurse (BSN, RN) ... (≥200 chars)",
                    "targetRole": "ICU Charge Nurse",
                    "tone": "warm"
                  }
                }
              }
            },
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  },
                  "resumeText": {
                    "type": "string"
                  },
                  "targetRole": {
                    "type": "string",
                    "maxLength": 120,
                    "description": "Optional role the pitch should aim at.",
                    "example": "Senior Product Designer"
                  },
                  "tone": {
                    "type": "string",
                    "enum": [
                      "confident",
                      "warm",
                      "energetic",
                      "executive",
                      "casual"
                    ],
                    "default": "confident"
                  }
                }
              }
            },
            "text/plain": {
              "schema": {
                "type": "string",
                "minLength": 200,
                "maxLength": 20000
              },
              "description": "Raw resume text. Pass targetRole and tone as query parameters."
            }
          }
        },
        "parameters": [
          {
            "name": "targetRole",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Only for text/plain bodies."
          },
          {
            "name": "tone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "confident",
                "warm",
                "energetic",
                "executive",
                "casual"
              ]
            },
            "description": "Only for text/plain bodies."
          },
          {
            "name": "PAYMENT-SIGNATURE",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "x402 v2 payment payload (base64), built from the PAYMENT-REQUIRED challenge."
          },
          {
            "name": "Authorization",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "MPP credential: \"Payment <credential>\", built from the WWW-Authenticate: Payment challenge."
          }
        ],
        "responses": {
          "200": {
            "description": "Pitch generated",
            "headers": {
              "PAYMENT-RESPONSE": {
                "description": "x402 settlement result (base64 JSON with transaction hash)",
                "schema": {
                  "type": "string"
                }
              },
              "Payment-Receipt": {
                "description": "MPP receipt (base64url JSON with reference)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PitchScript"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "Payment Required: $0.50 USDC per call on Base mainnet. Cards coming soon.",
            "headers": {
              "PAYMENT-REQUIRED": {
                "description": "x402 v2 payment requirements (base64 JSON)",
                "schema": {
                  "type": "string"
                }
              },
              "WWW-Authenticate": {
                "description": "MPP challenges (one per accepted method/currency)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Payload or resume too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Unsupported content type or file type",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resume too short, URL-only input, or unreadable file",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited — see Retry-After header",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Model returned an invalid result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Upstream model unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "details": {}
            }
          }
        }
      },
      "PitchScript": {
        "type": "object",
        "required": [
          "id",
          "object",
          "headline",
          "script",
          "shortScript",
          "keyStrengths",
          "captions"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "const": "pitch_script"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "model": {
            "type": "string"
          },
          "input": {
            "type": "object",
            "properties": {
              "source": {
                "enum": [
                  "text",
                  "pdf",
                  "docx"
                ]
              },
              "characters": {
                "type": "integer"
              },
              "targetRole": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tone": {
                "enum": [
                  "confident",
                  "warm",
                  "energetic",
                  "executive",
                  "casual"
                ]
              }
            }
          },
          "headline": {
            "type": "string"
          },
          "script": {
            "type": "object",
            "description": "45–60 s first-person script",
            "properties": {
              "hook": {
                "type": "string"
              },
              "value": {
                "type": "string"
              },
              "proof": {
                "type": "string"
              },
              "close": {
                "type": "string"
              },
              "fullText": {
                "type": "string"
              },
              "wordCount": {
                "type": "integer"
              },
              "estimatedSeconds": {
                "type": "integer"
              }
            }
          },
          "shortScript": {
            "type": "object",
            "description": "15 s version",
            "properties": {
              "text": {
                "type": "string"
              },
              "wordCount": {
                "type": "integer"
              },
              "estimatedSeconds": {
                "type": "integer"
              }
            }
          },
          "keyStrengths": {
            "type": "array",
            "minItems": 3,
            "maxItems": 3,
            "items": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string"
                },
                "evidence": {
                  "type": "string"
                }
              }
            }
          },
          "captions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "section": {
                  "enum": [
                    "hook",
                    "value",
                    "proof",
                    "close"
                  ]
                },
                "text": {
                  "type": "string"
                },
                "startSec": {
                  "type": "number"
                },
                "endSec": {
                  "type": "number"
                }
              }
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "usage": {
            "type": "object",
            "properties": {
              "inputTokens": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "outputTokens": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "attempts": {
                "type": "integer"
              }
            }
          },
          "pricing": {
            "type": "object",
            "properties": {
              "tier": {
                "type": "string"
              },
              "listPriceUsd": {
                "type": "string"
              },
              "cardPriceUsd": {
                "type": "string"
              },
              "charged": {
                "type": "boolean"
              },
              "note": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}