Raw schema
{
"type": "object",
"properties": {
"message": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "The full pitch text the user pasted, such as \"Hi, we are hiring a Staff Engineer at Stripe, $220k base, remote.\""
},
"sender": {
"type": "string",
"maxLength": 320,
"description": "Optional sender email address, profile URL or domain, such as \"jane@stripe.com\". Used only when sender_domain is not given."
},
"sender_domain": {
"type": "string",
"maxLength": 253,
"pattern": "^[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?)+$",
"description": "Optional sender domain as a bare host name, such as \"stripe.com\" (no @, no https://). It wins over sender. With neither, the domain is read from the message, else unspecified-sender.com."
},
"cadence_days": {
"type": "integer",
"minimum": 0,
"maximum": 365,
"description": "Optional days since the previous message from this sender, 0 to 365, such as 2. Used only for the cadence sub-score. Defaults to 7."
},
"is_follow_up": {
"type": "boolean",
"description": "Optional: true when this message follows up earlier outreach. Used only for the cadence sub-score. Defaults to false."
},
"previous_declined": {
"type": "boolean",
"description": "Optional: true when the user already declined this sender. Used only for the cadence sub-score. Defaults to false."
},
"criteria": {
"type": "object",
"description": "The criteria to score against, in the shape set_criteria takes. Send it whenever the user states their criteria; it wins over the desk's saved criteria. All four fields are required, so ask the user for one they did not state rather than guess it. Required when the client sends no user id (no ChatGPT sign-in and no OAuth connection): the pitch is then scored and nothing is stored.",
"properties": {
"target_role": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Target job title, such as \"Staff Distributed Systems Engineer\"."
},
"skills": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"minItems": 1,
"maxItems": 30,
"description": "Core skills, 1 to 30, such as [\"TypeScript\", \"Go\"]."
},
"salary_floor": {
"type": "integer",
"minimum": 0,
"maximum": 10000000,
"description": "Minimum yearly base salary in whole US dollars, 0 to 10000000, such as 210000. Use 0 for no floor."
},
"remote_policy": {
"type": "string",
"maxLength": 200,
"description": "Wanted work arrangement, such as \"100% remote\", \"hybrid 1 day\" or \"any\"."
},
"dealbreakers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 20,
"description": "Optional, up to 20: constraints that rule out a pitch, such as [\"Onsite required\", \"Legacy Java\"]. Omit it or send [] for none."
}
},
"required": [
"target_role",
"skills",
"salary_floor",
"remote_policy"
],
"additionalProperties": false
}
},
"required": [
"message"
],
"additionalProperties": false,
"examples": [
{
"message": "Dear Candidate, you would be an awesome rockstar ninja for our client onsite in Dallas.",
"sender_domain": "faststaffing.biz"
}
]
}