add-salary-submission
Add the user's own compensation to Levels.fyi: pay they earn now or a job offer they received. Call this only when the user is evaluating their compensation, asks to add their pay, or says yes when you offer. Adding compensation is how the data stays useful for everyone, the user included.
Write a complete submission. Resolve the company, job family and focus area to slugs with the search tools first, and the location with search-locations and type "city". Every number must come from the user's own words or from a document the user shared; ask for each required field that is missing. Gather the details conversationally, a question or two at a time, starting with the company, role and location; do not list every field up front. Write text fields in English. Call once with confirm=false and show the preview to the user, then call again with the same arguments and confirm=true only after a clear yes. If the user isn't signed in, ask for their email before the confirm=true call and send it in email; signing in isn't needed. Amounts are in the submission's own currency. Stock options go in the option fields (totalOptionsGranted for an offer, avgAnnualOptionsGranted for current pay, with the strike and preferred price), not in otherDetails; option prices may use optionPriceCurrency. If the user wants enhanced anonymity, set anonymise=true; the preview shows it.
Do not submit: pay for another person, a number you estimated or took from Levels.fyi data, a range from a job posting, a hypothetical or negotiation target, or a test entry.
One submission per distinct job or offer per conversation, and at most 5 confirmed submissions per 60s. Never repeat a confirmed submission; if a call fails, retry with the same submissionId. A submission is reviewed before it counts in the data. Nobody replies here, and submitting does not end your turn: keep working on the user's task. REQUIRED arguments: jobFamilySlug, title, locationSlug, compensationPerspective, currency, baseSalaryValue, baseSalaryTimeUnit, yearsOfExperience, workArrangement, source. Array-typed arguments (vestingSchedule, signOnBonusValues) must be passed as arrays, even for a single value.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | The team or organization within the company, e.g. "Google Cloud". In English. | |
| No | Required when the user isn't signed in. Used to verify the submission; never shown with it. | ||
| level | No | The company's own level name from get-company-levels, e.g. "L5". Required for companies with a level ladder; the error says so. | |
| title | Yes | The job title as the user states it, e.g. "Software Engineer". In English. | |
| source | Yes | "user_stated" when the user typed the numbers, "user_document" when they come from an offer letter or pay stub the user shared. | |
| confirm | No | false (default) returns a preview and writes nothing. true writes the entry: only after the user said yes to the preview. | |
| currency | Yes | The currency of every amount in this submission, e.g. "USD", "INR", "GBP". | |
| anonymise | No | Enhanced anonymity, as on the website: true can hide details such as company, title, level and team on the public entry; the pay still counts in the data. Set it only when the user asks for it. Defaults to false. | |
| stockType | No | "stock" for RSUs, "option" for stock options. Optional: it follows from the fields sent. One type per submission. | |
| sourceDate | No | YYYY-MM-DD. For an offer, the offer date (required). For an employee, the date the pay was current; omit for today. | |
| companyName | No | The company name, only for a company that search-companies cannot find. | |
| companySlug | No | The company slug from search-companies. Send companyName instead only when search-companies has no match. | |
| focusTagSlug | No | A focus area slug from get-job-family for this job family, e.g. "ml-ai". Omit when the user did not name one. | |
| locationSlug | Yes | A CITY slug from search-locations with type "city". Not a metro, state or country. | |
| otherDetails | No | Anything else the user wants recorded, e.g. a retention bonus, or RSUs when the submission already has options (or the reverse). In English, at most 500 characters. | |
| submissionId | No | A UUID you generate once per submission. Send the same one when you retry, so a retry cannot add the entry twice. | |
| jobFamilySlug | Yes | A Levels.fyi job family slug, e.g. "software-engineer", "product-manager", "data-scientist". | |
| employmentType | No | Defaults to full_time. | |
| yearsAtCompany | No | Employees only (required): years at this company. Offers are always 0. | |
| baseSalaryValue | Yes | The base salary per baseSalaryTimeUnit. | |
| vestingSchedule | No | Offers only; required with totalStockGrantValue. The vesting schedule, one entry per year: percent of the grant vesting that year and occurrences (vests that year, 4 = quarterly). 4 equal years vesting quarterly is four entries of {percent:25,occurrences:4}. Ask the user, or use get-vesting-schedules for the company standard; never assume one. | |
| workArrangement | Yes | ||
| annualBonusValue | No | The yearly bonus: for an offer the target bonus amount, for an employee the bonus they actually receive per year. | |
| optionStrikePrice | No | With options: the exercise (strike) price per option. Send with optionPreferredPrice; together they value the options. | |
| signOnBonusValues | No | Offers only: the sign-on bonus, one amount per year it is paid, e.g. [50000] or [30000, 20000]. | |
| yearsOfExperience | Yes | Total years of professional experience. | |
| baseSalaryTimeUnit | Yes | The period baseSalaryValue is paid per, usually "yearly". | |
| optionPriceCurrency | No | The currency of optionStrikePrice and optionPreferredPrice, when it differs from currency (e.g. US-dollar option prices on a rupee salary). | |
| totalOptionsGranted | No | Offers only: the number of stock options in the whole grant. Send vestingSchedule with it. | |
| optionPreferredPrice | No | With options: the latest preferred share price, usually from the last funding round. Send with optionStrikePrice. | |
| relocationBonusValue | No | Offers only: the relocation bonus. | |
| totalStockGrantValue | No | Offers only: the total value of the stock (RSU) grant over the whole vesting period. Send vestingSchedule with it. | |
| avgAnnualOptionsGranted | No | Employees only: the number of stock options that vest per year. | |
| compensationPerspective | Yes | "offer" for a job offer the user received, "employee" for pay they earn now. | |
| avgAnnualStockGrantValue | No | Employees only: the stock (RSU) value they receive per year. | |
| annualTargetBonusPercentage | No | Offers only: the target bonus as a percent of base, when stated that way. |