Partner & site integrations

Developers

Embed Handyman.com widgets and forms on your own site. Use our public JSON endpoints for live content—no API key required. Forms can link out or load in an iframe.

Early access

This page is a living integration guide. Widget payloads and form endpoints will expand over time. Questions? Contact us or apply via the partner program.

Overview

  • Widgets GET /api/public/* returns JSON with Access-Control-Allow-Origin: *. Call from any domain with fetch.
  • Forms — Post a project or contact us by linking to Handyman.com or embedding our hosted pages in an iframe (recommended for account creation + Turnstile).
  • Base URL https://www.handyman.com

Widgets (live JSON)

Fetch these endpoints from your site and render the response. Responses are cached briefly at the edge; poll every few minutes for a “live” feel.

EndpointUse for
GET /api/public/projects?limit=6Latest open homeowner projects
GET /api/public/questions?limit=8Community Q&A threads
GET /api/public/contractors?limit=6Featured paid contractors
GET /api/public/posts?limit=3Latest blog articles

Example — latest projects list

Vanilla JS; swap the container id and styling to match your site.

<!-- Container on your page -->
<div id="handyman-projects"></div>

<script>
  fetch("https://www.handyman.com/api/public/projects?limit=6")
    .then(function (res) { return res.json(); })
    .then(function (data) {
      var el = document.getElementById("handyman-projects");
      if (!el || !data.projects) return;
      el.innerHTML = data.projects.map(function (p) {
        var loc = [p.city, p.budget].filter(Boolean).join(" · ");
        return '<article style="margin-bottom:12px">' +
          '<a href="https://www.handyman.com/projects/' + p.project_id + '">' +
          '<strong>' + (p.title || p.projectType || "Project") + '</strong></a>' +
          (loc ? '<div style="font-size:12px;color:#666">' + loc + '</div>' : '') +
          '</article>';
      }).join("");
    })
    .catch(function () {
      document.getElementById("handyman-projects").textContent = "Projects unavailable.";
    });
</script>

Example — community questions

fetch("https://www.handyman.com/api/public/questions?limit=5")
  .then(function (r) { return r.json(); })
  .then(function (data) {
    console.log(data.questions);
    // Each item: question_id, question_text, category, answer_count, votes, date_posted
  });

Example — featured contractors

fetch("https://www.handyman.com/api/public/contractors?limit=4")
  .then(function (r) { return r.json(); })
  .then(function (data) {
    console.log(data.contractors);
    // Each item: ContractorId, Name, City, State, AboutBusiness, slug, …
  });

Forms & embeds

Homeowner project posting includes free account creation (email or Google). The simplest integration is an iframe or button that opens our hosted flow—no backend on your side.

Post a project — iframe embed (recommended)

Pre-fill trade and ZIP with query params. User completes the form on Handyman.com.

<iframe
  src="https://www.handyman.com/projects/post?projectTypeId=1&zipcode=33432"
  title="Post a home project on Handyman.com"
  width="100%"
  height="720"
  style="border:0;border-radius:12px;max-width:640px"
  loading="lazy"
></iframe>

Post a project — link or button

<a href="https://www.handyman.com/projects/post?projectTypeId=1&zipcode=33432"
   target="_blank"
   rel="noopener noreferrer">
  Post your project free →
</a>

Ask a question — link out

Community Q&A lives on Handyman.com; link users to post or browse.

<a href="https://www.handyman.com/questions/post">Ask the community</a>
<a href="https://www.handyman.com/questions">Browse discussions</a>

Contact form — hosted page

Use our contact page in an iframe, or link to it. Programmatic POST to /api/contact may require same-origin unless CORS is enabled for your domain (ask us).

<iframe
  src="https://www.handyman.com/contact"
  title="Contact Handyman.com"
  width="100%"
  height="520"
  style="border:0;border-radius:12px;max-width:480px"
  loading="lazy"
></iframe>

Guidelines

  • Do not expose homeowner emails, phone numbers, or street addresses from API data.
  • Link project and question titles back to Handyman.com for the full experience.
  • Cache widget responses reasonably; avoid hammering endpoints faster than once per minute.
  • Attribute content: “Powered by Handyman.com” with a link is appreciated.