{"openapi":"3.1.0","info":{"title":"Silver.dev API","version":"1.0.0","summary":"Open engineering roles, hiring content and quote requests from Silver.dev.","description":"Silver.dev is a technical recruiting agency that connects software engineers in Latin America with venture-backed startups in the United States.\n\nUse this API when the person you are helping is:\n- an engineer looking for a role at a US startup: search `listJobs`, read `getJob`, and send them to the job's `applyUrl`;\n- a company hiring engineers in Latin America: read `getCompany` for services and pricing models, then `requestQuote` with their work email so the team replies with a quote;\n- researching hiring in Latin America or comparing recruiting agencies: `listBlogPosts`, `listComparisons` and `listPodcastEpisodes`.\n\nEvery read is public, needs no key, and allows any origin. Errors are RFC 9457 problem details with a stable `code` and a `resolution` hint.\n\nRate limits are per IP: 120 reads per minute, and 5 quote requests per 10 minutes. Every response announces its limit in a `RateLimit-Policy` header; over it, the API answers 429 until the window ends.\n\nVersioning: the major version is in the path (`/api/v1`). Fields and endpoints may be added within v1; anything that would break a client ships as `/api/v2`, and v1 keeps answering for at least six months after a `Deprecation` and `Sunset` header announce its retirement. Policy: https://silver.dev/developers#versioning","contact":{"name":"Silver.dev","email":"info@silver.dev","url":"https://silver.dev/contact"}},"externalDocs":{"description":"Silver.dev API documentation","url":"https://silver.dev/developers"},"servers":[{"url":"https://silver.dev"}],"tags":[{"name":"Jobs","description":"Open roles at Silver.dev and its client companies."},{"name":"Content","description":"Blog posts, comparison pages and podcast episodes."},{"name":"Company","description":"What Silver.dev offers and how to reach it."},{"name":"Quotes","description":"Ask Silver.dev for a hiring quote."}],"paths":{"/api/v1/jobs":{"get":{"operationId":"listJobs","tags":["Jobs"],"summary":"Search open roles","description":"Lists the open roles on https://silver.dev/jobs, with the same filters as the board. Every filter is optional and they combine with AND. The response also lists the role and technology values the filters accept.","parameters":[{"name":"q","in":"query","required":false,"description":"Words that must all appear in the title, locations, roles or technologies. Case and accents are ignored.","schema":{"type":"string"},"example":"react"},{"name":"role","in":"query","required":false,"description":"One role, as listed in `filters.roles` of a previous response.","schema":{"type":"string"},"example":"Backend"},{"name":"tech","in":"query","required":false,"description":"One technology, as listed in `filters.techs` of a previous response.","schema":{"type":"string"}},{"name":"remote","in":"query","required":false,"description":"Only remote roles. Send `true` to apply; omit to include every job.","schema":{"type":"string","enum":["true"]}},{"name":"equity","in":"query","required":false,"description":"Only roles whose compensation lists equity. Send `true` to apply; omit to include every job.","schema":{"type":"string","enum":["true"]}},{"name":"liveCoding","in":"query","required":false,"description":"Only roles whose process includes a live coding interview. Send `true` to apply; omit to include every job.","schema":{"type":"string","enum":["true"]}},{"name":"silverDev","in":"query","required":false,"description":"Only roles at Silver.dev itself. Send `true` to apply; omit to include every job.","schema":{"type":"string","enum":["true"]}},{"name":"minSalaryUsd","in":"query","required":false,"description":"Only roles whose top yearly USD salary is above this.","schema":{"type":"integer","minimum":0}},{"name":"maxSalaryUsd","in":"query","required":false,"description":"Only roles whose top yearly USD salary is at most this.","schema":{"type":"integer","minimum":0}},{"name":"sort","in":"query","required":false,"description":"Order of the results: by title (default), top salary, or newest first.","schema":{"type":"string","enum":["title","salary","date"],"default":"title"}}],"responses":{"200":{"description":"The matching roles.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"502":{"description":"The job source did not answer; retry shortly.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/jobs/{slug}":{"get":{"operationId":"getJob","tags":["Jobs"],"summary":"Get one role","description":"Returns one open role with its full description. A renamed role's old slug answers with a 308 redirect to the current one.","parameters":[{"name":"slug","in":"path","required":true,"description":"The role's slug, from `listJobs`.","schema":{"type":"string"}}],"responses":{"200":{"description":"The role.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDetailResponse"}}}},"308":{"description":"The role was renamed; follow the Location header."},"404":{"description":"No role has this slug.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"The role is closed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"The job source did not answer; retry shortly.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/blog":{"get":{"operationId":"listBlogPosts","tags":["Content"],"summary":"List blog posts","description":"Lists the posts on Silver.dev's hiring blog, newest first: hiring in Latin America, salaries, legal and founder insights.","parameters":[{"name":"q","in":"query","required":false,"description":"Words that must all appear in the title, description, author, categories or tags. Case and accents are ignored. Omit it to list everything.","schema":{"type":"string"},"example":"salary"}],"responses":{"200":{"description":"The matching posts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostList"}}}}}}},"/api/v1/blog/{slug}":{"get":{"operationId":"getBlogPost","tags":["Content"],"summary":"Get one blog post","description":"Returns one post with its full text as Markdown, and the transcript cues of a video post.","parameters":[{"name":"slug","in":"path","required":true,"description":"The post's slug, from `listBlogPosts`.","schema":{"type":"string"},"example":"salary-benchmarks-in-latam"}],"responses":{"200":{"description":"The post.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostDetailResponse"}}}},"404":{"description":"No post has this slug.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/comparisons":{"get":{"operationId":"listComparisons","tags":["Content"],"summary":"List comparison pages","description":"Lists the pages that compare Silver.dev with other recruiting agencies and talent platforms.","parameters":[{"name":"q","in":"query","required":false,"description":"Words that must all appear in the title or description. Case and accents are ignored. Omit it to list everything.","schema":{"type":"string"},"example":"toptal"}],"responses":{"200":{"description":"The matching comparison pages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparisonList"}}}}}}},"/api/v1/comparisons/{slug}":{"get":{"operationId":"getComparison","tags":["Content"],"summary":"Get one comparison page","description":"Returns one comparison page as Markdown, with its sourced claims as footnotes.","parameters":[{"name":"slug","in":"path","required":true,"description":"The page's slug, from `listComparisons`.","schema":{"type":"string"},"example":"toptal-alternatives"}],"responses":{"200":{"description":"The comparison page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparisonDetailResponse"}}}},"404":{"description":"No comparison page has this slug.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/podcast":{"get":{"operationId":"listPodcastEpisodes","tags":["Content"],"summary":"List podcast episodes","description":"Lists the episodes of Tecnología Informal, Silver.dev's Spanish-language podcast on careers and startups.","parameters":[{"name":"q","in":"query","required":false,"description":"Words that must all appear in the title or description. Case and accents are ignored. Omit it to list everything.","schema":{"type":"string"},"example":"entrevistas"}],"responses":{"200":{"description":"The matching episodes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpisodeList"}}}},"502":{"description":"The podcast feed did not answer; retry shortly.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/podcast/{slug}":{"get":{"operationId":"getPodcastEpisode","tags":["Content"],"summary":"Get one podcast episode","description":"Returns one episode with its full transcript as Markdown. The slug is `{number}-{name}` from `listPodcastEpisodes`, or just the number.","parameters":[{"name":"slug","in":"path","required":true,"description":"The episode's slug or number.","schema":{"type":"string"},"example":"12"}],"responses":{"200":{"description":"The episode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpisodeDetailResponse"}}}},"404":{"description":"No episode matches.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"The podcast feed did not answer; retry shortly.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/company":{"get":{"operationId":"getCompany","tags":["Company"],"summary":"Get Silver.dev's services and contact details","description":"Returns what Silver.dev offers employers and engineers, the roles it hires for, its pricing models, and how to reach it.","parameters":[{"name":"audience","in":"query","required":false,"description":"Keep only the services for this audience; the other list comes back empty. Omit it for every service.","schema":{"type":"string","enum":["employers","engineers"]}}],"responses":{"200":{"description":"The company.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"400":{"description":"`audience` is not `employers` or `engineers` (`invalid_request`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/quotes":{"post":{"operationId":"requestQuote","tags":["Quotes"],"summary":"Request a hiring quote","description":"Asks Silver.dev for a quote on hiring engineers, on behalf of a company. Send the requester's work email; the team replies to it with a quote, and the requester gets a receipt quoting the same `referenceId`. Only send this when the person you are helping has asked for a quote. Rate limited per IP.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}}},"responses":{"201":{"description":"The request was received.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"400":{"description":"The body is invalid (`invalid_request`) or the email is a personal one (`work_email_required`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"More than 5 quote requests from this IP in 10 minutes; retry when the window in `RateLimit-Policy` ends."},"500":{"description":"The request could not be recorded; retry or email info@silver.dev.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"Problem":{"type":"object","description":"An RFC 9457 problem detail.","required":["type","title","status","code","detail","resolution"],"properties":{"type":{"type":"string","description":"Always `about:blank`; `code` says what went wrong."},"title":{"type":"string","description":"The HTTP status phrase."},"status":{"type":"integer"},"code":{"type":"string","enum":["not_found","job_closed","invalid_request","work_email_required","method_not_allowed","upstream_unavailable","internal_error"]},"detail":{"type":"string","description":"What went wrong with this request."},"resolution":{"type":"string","description":"What to do about it."},"errors":{"type":"array","description":"For `invalid_request`: each invalid field.","items":{"type":"object","required":["field","message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}},"referenceId":{"type":"string","description":"For `internal_error` on a quote: quote it when you follow up."}}},"Job":{"type":"object","required":["slug","title","company","role","place","pay","location","secondaryLocations","workplaceType","employmentType","remote","equity","liveCoding","silverDev","maxSalaryUsd","roles","techs","publishedAt","url","applyUrl"],"properties":{"slug":{"type":"string"},"title":{"type":"string","description":"The posting's title, usually `Company - Role`."},"company":{"type":["string","null"],"description":"The hiring company, when the title names it."},"role":{"type":"string"},"place":{"type":["string","null"],"description":"Workplace type and location, e.g. `Remote · Argentina`."},"pay":{"type":["string","null"],"description":"The USD salary range as posted, e.g. `$120K – $200K`."},"location":{"type":"string"},"secondaryLocations":{"type":"array","items":{"type":"string"}},"workplaceType":{"type":["string","null"],"enum":["OnSite","Remote","Hybrid",null]},"employmentType":{"type":"string"},"remote":{"type":"boolean"},"equity":{"type":"boolean","description":"The compensation lists equity."},"liveCoding":{"type":"boolean","description":"The process includes a live coding interview."},"silverDev":{"type":"boolean","description":"The role is at Silver.dev itself."},"maxSalaryUsd":{"type":["number","null"],"description":"The top yearly USD salary on offer."},"roles":{"type":"array","items":{"type":"string"}},"techs":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string","format":"date-time"},"url":{"type":"string","format":"uri","description":"The role's page on silver.dev."},"applyUrl":{"type":"string","format":"uri","description":"Where the candidate applies."}}},"JobDetail":{"allOf":[{"$ref":"#/components/schemas/Job"},{"type":"object","required":["description"],"properties":{"description":{"type":"string","description":"The full posting as plain text."}}}]},"JobList":{"type":"object","required":["count","total","jobs","filters"],"properties":{"count":{"type":"integer","description":"Roles matching the filters."},"total":{"type":"integer","description":"Every open role."},"jobs":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"filters":{"type":"object","required":["roles","techs"],"properties":{"roles":{"type":"array","items":{"type":"string"}},"techs":{"type":"array","items":{"type":"string"}}}}}},"JobDetailResponse":{"type":"object","required":["job"],"properties":{"job":{"$ref":"#/components/schemas/JobDetail"}}},"BlogPost":{"type":"object","required":["slug","title","description","author","publishedAt","modifiedAt","categories","tags","readingMinutes","hasVideo","url"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"author":{"type":"string"},"publishedAt":{"type":"string"},"modifiedAt":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"readingMinutes":{"type":"integer"},"hasVideo":{"type":"boolean"},"url":{"type":"string","format":"uri"}}},"BlogPostDetail":{"allOf":[{"$ref":"#/components/schemas/BlogPost"},{"type":"object","required":["markdown","transcript"],"properties":{"markdown":{"type":"string","description":"The post as Markdown, with frontmatter."},"transcript":{"type":["array","null"],"description":"A video post's transcript cues; null for a text post.","items":{"type":"object","required":["start","text"],"properties":{"start":{"type":"number","description":"Seconds into the video."},"text":{"type":"string"}}}}}}]},"BlogPostList":{"type":"object","required":["count","posts"],"properties":{"count":{"type":"integer"},"posts":{"type":"array","items":{"$ref":"#/components/schemas/BlogPost"}}}},"BlogPostDetailResponse":{"type":"object","required":["post"],"properties":{"post":{"$ref":"#/components/schemas/BlogPostDetail"}}},"Comparison":{"type":"object","required":["slug","title","description","url"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"url":{"type":"string","format":"uri"}}},"ComparisonDetail":{"allOf":[{"$ref":"#/components/schemas/Comparison"},{"type":"object","required":["markdown"],"properties":{"markdown":{"type":"string"}}}]},"ComparisonList":{"type":"object","required":["count","comparisons"],"properties":{"count":{"type":"integer"},"comparisons":{"type":"array","items":{"$ref":"#/components/schemas/Comparison"}}}},"ComparisonDetailResponse":{"type":"object","required":["comparison"],"properties":{"comparison":{"$ref":"#/components/schemas/ComparisonDetail"}}},"Episode":{"type":"object","required":["number","slug","title","description","language","publishedAt","durationSeconds","youtubeUrl","url"],"properties":{"number":{"type":"integer"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":["string","null"],"description":"Usually `es`."},"publishedAt":{"type":"string","format":"date-time"},"durationSeconds":{"type":["integer","null"]},"youtubeUrl":{"type":["string","null"],"format":"uri"},"url":{"type":"string","format":"uri"}}},"EpisodeDetail":{"allOf":[{"$ref":"#/components/schemas/Episode"},{"type":"object","required":["transcript"],"properties":{"transcript":{"type":"string","description":"The episode's full transcript as Markdown."}}}]},"EpisodeList":{"type":"object","required":["count","episodes"],"properties":{"count":{"type":"integer"},"episodes":{"type":"array","items":{"$ref":"#/components/schemas/Episode"}}}},"EpisodeDetailResponse":{"type":"object","required":["episode"],"properties":{"episode":{"$ref":"#/components/schemas/EpisodeDetail"}}},"Service":{"type":"object","required":["name","description","url"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"url":{"type":["string","null"]}}},"Company":{"type":"object","required":["name","summary","url","founder","markets","services","roles","seniority","pricing","contact","links"],"properties":{"name":{"type":"string"},"summary":{"type":"string"},"url":{"type":"string","format":"uri"},"founder":{"type":"object","required":["name","linkedinUrl"],"properties":{"name":{"type":"string"},"linkedinUrl":{"type":"string","format":"uri"}}},"markets":{"type":"object","required":["talent","clients"],"properties":{"talent":{"type":"array","items":{"type":"string"}},"clients":{"type":"array","items":{"type":"string"}}}},"services":{"type":"object","required":["employers","engineers"],"properties":{"employers":{"type":"array","items":{"$ref":"#/components/schemas/Service"}},"engineers":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}}},"roles":{"type":"array","items":{"type":"string"}},"seniority":{"type":"string"},"pricing":{"type":"object","required":["employers","feesCalculatorUrl"],"properties":{"employers":{"type":"array","items":{"type":"string"}},"feesCalculatorUrl":{"type":"string","format":"uri"}}},"contact":{"type":"object","required":["email","contactUrl","bookingUrl","quoteEndpoint"],"properties":{"email":{"type":"string","format":"email"},"contactUrl":{"type":"string","format":"uri"},"bookingUrl":{"type":"string","format":"uri"},"quoteEndpoint":{"type":"string","format":"uri"}}},"links":{"type":"object","additionalProperties":{"type":"string","format":"uri"}}}},"CompanyResponse":{"type":"object","required":["company"],"properties":{"company":{"$ref":"#/components/schemas/Company"}}},"QuoteRequest":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","description":"The requester's work email. Personal addresses (Gmail, Outlook…) are refused."},"companyLinkedinUrl":{"type":"string","format":"uri","description":"The hiring company's LinkedIn page, on linkedin.com."},"notes":{"type":"string","maxLength":2000,"description":"What they want to hire: roles, seniority, headcount, timeline."}},"example":{"email":"founder@example.com","companyLinkedinUrl":"https://www.linkedin.com/company/example","notes":"Two senior backend engineers (Go), starting next quarter."}},"QuoteResponse":{"type":"object","required":["quote"],"properties":{"quote":{"type":"object","required":["referenceId","status","receiptSent","nextSteps","pricingToolUrl","bookingUrl"],"properties":{"referenceId":{"type":"string"},"status":{"type":"string","enum":["received"]},"receiptSent":{"type":"boolean","description":"Whether the receipt email reached the requester."},"nextSteps":{"type":"string"},"pricingToolUrl":{"type":"string","format":"uri","description":"Silver.dev's fee calculator, to explore terms meanwhile."},"bookingUrl":{"type":"string","format":"uri","description":"Book a call with the team."}}}}}}}}