Techsy
Otetttaa yhteyte
Aloita
Takaisin blogiin
web-development

HubSpot API -integraatio räätälöityihin sisäisiin työkaluihin: Node- ja Python-opas (2026)

Kirjoittanut Mert Batur Gürbüz
Jul 22, 2026
11 lukuaika
Sisällys
HubSpot API -integraatio räätälöityihin sisäisiin työkaluihin: Node- ja Python-opas (2026)

HubSpot API -integraatio räätälöityihin sisäisiin työkaluihin: Node- ja Python-opas (2026)

Etsitkö edelleen HubSpot API -avainta HubSpot API -integraatiosi kytkemistä varten? Lopeta etsiminen. HubSpot lopetti staattiset API-avaimet 30. marraskuuta 2022, eikä nykyinen Node SDK (@hubspot/api-client, nyt versiossa 14) hyväksy sellaista joka tapauksessa. Oikea tunniste yksittäisen tilin sisäiselle työkalulle on yksityisen sovelluksen käyttöoikeustunnus (private app access token), ja tämä opas rakentaa aidon HubSpotista sisäiseen työkaluun tapahtuvan synkronoinnin sekä Nodessa että Pythonissa – aina ensimmäisestä create contact -kutsusta allekirjoituksella varmistettuun webhookiin.

Pikavastaus: HubSpot API -integraatio mahdollistaa sen, että räätälöity sisäinen työkalu lukee ja kirjoittaa CRM-dataa HubSpotin v3 REST API:n kautta. Yksittäisen tilin sisäisessä työkalussa tunnistaudu yksityisen sovelluksen käyttöoikeustunnuksella (HubSpot poisti API-avaimet käytöstä vuonna 2022) ja synkronoi muutokset reaaliajassa webhookeilla kyselyn (polling) sijaan.

Tässä on mitä tulet rakentamaan:

  • Yksityisen sovelluksen tunnuksen autentikointi ja ensimmäinen create contact -kutsu Nodessa ja Pythonissa
  • Webhook-vastaanotin, joka varmentaa X-HubSpot-Signature-v3:n ennen payloadin luottamista
  • 429-varma, 100 tietueen erissä tapahtuva synkronointi sisäiseen tikettijärjestelmään tai ERP-tietueeseen

Miten HubSpot API -integraatio toimii räätälöidyissä sisäisissä työkaluissa?

HubSpot API -integraatio yhdistää räätälöidyn sisäisen työkalun (tukitikettisovellus, ERP, laskutusdashboard tai asiakasportaali) HubSpotin CRM-järjestelmään sen v3 REST API:n kautta. Työkalusi lukee ja kirjoittaa CRM-objekteja (kontaktit, diilit, yritykset tai mukautetut objektit) HTTPS-yhteyden yli käyttämällä yksityisen sovelluksen käyttöoikeustunnusta, ja reaaliaikaiset muutokset virtaavat takaisin webhookejen kautta.

Ajattele HubSpotin CRM:ää tietokantana, jonka kanssa keskustelet HTTP:n yli. Jokainen tietue on objekti, jolla on tyyppi ja ID. Rakentamasi hubspot crm api integration hoitaa kaksi tehtävää: se työntää dataa HubSpotiin (luo kontakti, kun tukiavaus avataan) ja hakee dataa sieltä (lue diili, kun sisäinen dashboardisi renderöityy).

Synkronointi kulkee yhteen tai kahteen suuntaan. Yksisuuntainen synkronointi kopioi muutokset joko HubSpotista työkaluusi tai työkalustasi HubSpotiin. Kaksisuuntainen synkronointi tekee molempia ja vaatii silmukkasuojauksen, jota käsittelemme myöhemmin. Sen sijaan, että kysyisit HubSpotilta "onko mitään uutta?" joka minuutti (polling), rekisteröi webhook, jolloin HubSpot ilmoittaa sinulle heti, kun tietue muuttuu.

Jos haluat omistaa datasi täysin mieluummin kuin integroida isännöidyn CRM-järjestelmän, avoimen lähdekoodin CRM:n itse isännöinti on eri polku, joka kannattaa punnita ennen sitoutumista. Mutta jos HubSpot on jo totuuden lähteesi, API on se tapa, jolla kaikki muu kommunikoi sen kanssa.

Yksittäisen tilin sisäiseen työkaluun et tarvitse OAuthia tai sovellusmarkkinatilistoa. Yksityisen sovelluksen tunnus ja webhook ovat koko integraatio.

Autentikointi vuonna 2026: Miksi HubSpot API -avainta ei enää ole

Käytä yksityisen sovelluksen käyttöoikeustunnusta HubSpot API -autentikointiin yksittäisen tilin sisäisessä työkalussa. Se on staattinen bearer-tunnus, jonka generoit kerran HubSpot-tililläsi ja rajoitat tarkasti niihin objekteihin, joita työkalusi käsittelee. Siinä ei ole refresh-virtaa eikä vanhenemista. OAuth on olemassa julkisia, useamman tilin sovelluksia varten, ei operatiivisen tiimisi sisäisesti käyttämää dashboardia varten.

Yksityisen sovelluksen tunnus vs. vanhentunut API-avain

Tässä on sudenkuoppa, johon puolet tätä hakutulosta kohtaavista kehittäjistä astuu. HubSpot poisti API-avaimet käytöstä 30. marraskuuta 2022, eikä niitä tueta enää lainkaan. Autocomplete ehdottaa edelleen "hubspot api key" lihasmuistin vuoksi, mutta haettavaa avainta ei ole. Käytä sen sijaan hubspot private app -sovellusta: luo se Asetuksissa, myönnä tarvittavat scope-oikeudet ja kopioi käyttöoikeustunnus Auth-välilehdeltä. HubSpotin yksityisten sovellusten yleiskatsaus kattaa asennuksen.

MenetelmäKäyttötarkoitusVanheneeko tai refresh?Sopii parhaiten
API-avainPoistettuPoistettu käytöstä marraskuussa 2022Ei mihinkään, on deprecated
Yksityisen sovelluksen käyttöoikeustunnusYksittäisen tilin sisäinen työkaluEi, staattinen, ei refreshiäSisäinen työkalusi, oletusvalinta tässä
OAuth 2.0Julkinen tai useamman tilin sovellusKyllä, tunnukset vanhenevat noin 6 tunnissa ja vaativat refreshinSovellukset, jotka listaat muiden yritysten portaaleihin
Service Key (julkinen beta, helmikuu 2026)Tilikohtainen, vain dataan tarkoitettu tunnisteTilikohtainen, dokumentaation mukaanVain dataan liittyvät palvelinajot, edelleen beta

Kaksi sääntöä itse tunnukselle. Myönnä vähimmät oikeudet: jos työkalusi lukee vain diilejä ja kirjoittaa kontakteja, pyydä crm.objects.contacts.write ja crm.objects.deals.read, ei mitään muuta. Säilytä tunnus ympäristömuuttujassa tai salaisuuksien hallinnassa, lähetä se Authorization: Bearer -otsakkeessa, älä koskaan kovakoodaa sitä äläkä toimita selaimelle.

Tuomio on yksinkertainen. Sisäiseen työkaluun käytä yksityisen sovelluksen käyttöoikeustunnusta. Käänny OAuthin puoleen vain, jos tästä tulee myöhemmin julkinen, useamman tilin sovellus, jonka muut yritykset asentavat omiin portaaleihinsa.

Ensimmäinen HubSpot API -kutsusi: Kontaktin luominen Nodessa ja Pythonissa

Kanonen ensimmäinen kutsu on create contact, ja viralliset SDK:t tekevät siitä muutaman rivin koodia. Asenna client, alusta se ympäristöstä haetulla yksityisen sovelluksen tunnuksella, luo kontakti ja lue diili takaisin. Tämä on sama malli, jota käytät uudelleen yrityksille, tiketeille ja hubspot custom objects api -kutsuille; vain objektityyppi muuttuu.

Tässä on Node-versio käyttäen @hubspot/api-client (v14):

javascript
// npm i @hubspot/api-client   (v14.x)
import { Client } from "@hubspot/api-client";

// Private app token from a secret manager or env var, never hard-coded
const hubspot = new Client({ accessToken: process.env.HUBSPOT_PRIVATE_APP_TOKEN });

// Create a contact
const { id } = await hubspot.crm.contacts.basicApi.create({
  properties: {
    email: "[email protected]",
    firstname: "Ada",
    lastname: "Lovelace",
    lifecyclestage: "lead",
  },
  associations: [],
});
console.log("Created contact", id);

// Read a deal by ID
const deal = await hubspot.crm.deals.basicApi.getById(
  "1234567890",
  ["dealname", "amount", "dealstage"],
);
console.log(deal.properties.dealname, deal.properties.amount);

Ja sama asia Pythonissa käyttäen hubspot-api-client (v12):

python
# pip install hubspot-api-client   (v12.x)
import os
from hubspot import HubSpot
from hubspot.crm.contacts import SimplePublicObjectInputForCreate

# Private app token from the environment, not source control
client = HubSpot(access_token=os.environ["HUBSPOT_PRIVATE_APP_TOKEN"])

# Create a contact
contact = client.crm.contacts.basic_api.create(
    simple_public_object_input_for_create=SimplePublicObjectInputForCreate(
        properties={
            "email": "[email protected]",
            "firstname": "Ada",
            "lastname": "Lovelace",
            "lifecyclestage": "lead",
        }
    )
)
print("Created contact", contact.id)

# Read a deal by ID
deal = client.crm.deals.basic_api.get_by_id(
    deal_id="1234567890",
    properties=["dealname", "amount", "dealstage"],
)
print(deal.properties["dealname"], deal.properties["amount"])

Pro-vinkki: testaa HubSpotin kehittäjä-hiekkalaatikossa (developer sandbox), älä koskaan ensin tuotannossa. Virheellinen luontikutsu tuotannossa jättää jälkeensä roskatietueita, jotka myyntitiimin on siivottava. Tunnus, scopet ja objektimalli toimivat identtisesti hiekkalaatikossa.

Miten synkronoit HubSpotin sisäiseen työkaluun reaaliajassa?

Käytä webhookeja, ei pollingia. Rekisteröi webhook-tilaus yksityiseen sovellukseesi kiinnostavan objektin ja tapahtuman osalta (esim. deal.propertyChange), osoita se isännöimääsi HTTPS-päätepisteeseen, ja HubSpot POSTaa sinulle pienen JSON-taulukon heti, kun vastaava muutos tapahtuu. Käytä pollingia vain, jos tilausta ei ole olemassa sille, mitä tarvitset seurata.

Hyöty on tehokkuudessa. Polling kysyy "onko mitään uutta?" joka minuutti ja kuluttaa rate limitiasi tehdessään niin; webhook kertoo vain hetken, jolloin diili muuttuu. Ero merkitsee paljon skaalautuvuuden kannalta, ja webhookit ovat nykyään valtavirtaa eivätkä eksoottisia: Postmanin 2025 State of the API Report, jossa kyseltiin yli 5 700 kehittäjältä, havaitsi, että noin puolet tiimeistä luottaa niihin.

Rekisteröi tilaus yksityisen sovelluksesi Webhooks-välilehdellä, aseta kohde-URL ja valitse tapahtumat. HubSpot lähettää taulukon event-objekteja, joista kukin sisältää subscriptionType:n, objectId:n ja tiedon siitä, mikä muuttui. Tässä on vastaanotinrunko Nodessa Expressillä:

javascript
import express from "express";

const app = express();
// Capture the raw body: you need the exact bytes to validate the signature next
app.use(express.json({
  verify: (req, _res, buf) => { req.rawBody = buf.toString("utf8"); },
}));

// HubSpot POSTs an array of events to this URL
app.post("/webhooks/hubspot", (req, res) => {
  const events = req.body; // [{ subscriptionType: "deal.propertyChange", objectId: 1234, ... }]
  for (const event of events) {
    console.log("HubSpot event:", event.subscriptionType, event.objectId);
    // Do NOT trust this payload yet. The next section validates it before we act.
  }
  res.sendStatus(200);
});

app.listen(3000, () => console.log("Listening on :3000"));

Tässä kohtaa rakennusopas muuttuu todeksi. Oletetaan, että synkronoit diilin pienvalmistajan ERP-tietueeksi: webhook laukeaa, käsittelijäsi luo tai päivittää vastaavan ERP-tiketin, ja operatiivinen tiimisi näkee muutoksen koskematta HubSpotiin. Sama reaaliaikainen lähestymistapa, jota käytämme äänitekoälyn synkronointiin CRM:n kanssa, vain liipaisimena on ominaisuuden muutos puhelun sijaan. Yksi varoitus: yllä oleva runko luottaa mihin tahansa siihen POSTattuun dataan. Korjaa se ennen live-julkaisua.

Webhook-allekirjoitusten varmentaminen (v3), jotta et koskaan luota väärennettyyn payloadiin

Varmenna jokainen saapuva webhook v3-allekirjoituksella. HubSpot allekirjoittaa jokaisen pyynnön sovelluksesi salaisuudella (app secret) ja lähettää kaksi otsaketta: X-HubSpot-Signature-v3 ja X-HubSpot-Request-Timestamp. Hylkää kaikki, jotka ovat vanhempia kuin 5 minuuttia, rakenna lähdemerkkijono muodossa method + full URL + raw body + timestamp, HMAC-SHA256-hashaa se sovellussalaisuudella, base64-koodaa ja vertaa vakioajassa.

Jos ohitat tämän, kuka tahansa, joka arvaa webhook-URL:si, voi väärentää diilin päivityksen. Varmentaminen ei ole valinnaista. HubSpotin pyyntöjen varmentamisdokumentti ja v3-allekirjoitusten changelog kertovat tarkan reseptin. Tässä se plug-and-play Express-middlewarena:

javascript
import crypto from "crypto";

const CLIENT_SECRET = process.env.HUBSPOT_APP_SECRET; // from your private app settings
const MAX_AGE_MS = 5 * 60 * 1000; // reject anything older than 5 minutes

export function validateHubSpotSignature(req, res, next) {
  const signature = req.header("X-HubSpot-Signature-v3");
  const timestamp = req.header("X-HubSpot-Request-Timestamp");

  // 1. Reject stale requests (replay protection)
  if (!signature || !timestamp || Date.now() - Number(timestamp) > MAX_AGE_MS) {
    return res.sendStatus(401);
  }

  // 2. Rebuild the exact source string: method + full URL + raw body + timestamp
  const uri = `https://${req.get("host")}${req.originalUrl}`;
  const source = `${req.method}${uri}${req.rawBody}${timestamp}`;

  // 3. HMAC-SHA256 with the app secret, base64-encoded
  const hash = crypto
    .createHmac("sha256", CLIENT_SECRET)
    .update(source, "utf8")
    .digest("base64");

  // 4. Constant-time compare against the header
  const expected = Buffer.from(hash);
  const received = Buffer.from(signature);
  if (expected.length !== received.length ||
      !crypto.timingSafeEqual(expected, received)) {
    return res.sendStatus(401);
  }
  next();
}

Sama tarkistus Python-funktiona, joten molemmat pinot on katettu:

python
import base64
import hashlib
import hmac
import os
import time

CLIENT_SECRET = os.environ["HUBSPOT_APP_SECRET"].encode("utf-8")
MAX_AGE_MS = 5 * 60 * 1000  # 5 minutes

def is_valid_signature(method, uri, body, signature, timestamp):
    # 1. Reject stale requests
    if not signature or not timestamp:
        return False
    if int(time.time() * 1000) - int(timestamp) > MAX_AGE_MS:
        return False

    # 2. method + full URL + raw body + timestamp
    source = f"{method}{uri}{body}{timestamp}".encode("utf-8")

    # 3. HMAC-SHA256, base64
    digest = hmac.new(CLIENT_SECRET, source, hashlib.sha256).digest()
    expected = base64.b64encode(digest).decode("utf-8")

    # 4. Constant-time compare
    return hmac.compare_digest(expected, signature)

Sudenkuoppa, joka maksaa ihmisiltä iltapäivän: HubSpot allekirjoittaa koko kohde-URL:n, skeeman, hostin ja polun yhdessä. Proxyn, kuormantasauspalvelimen tai ngrok-tunnelin takana req.get("host") voi raportoida sisäisen hostin sen julkisen hostin sijaan, jonka HubSpot allekirjoitti. Jos varmentaminen epäonnistuu jatkuvasti payloadille, jonka tiedät olevan legit, loggaa tarkka URI, jonka rakensit uudelleen, ja vertaa sitä julkiseen webhook-URL:iisi merkki merkiltä.

Rate limitit, 429-virheet ja Batch API: Mitä ajoimme tuotannossa

Yksityiset sovellukset saavat noin 10 pyyntöä sekunnissa (100 per 10 sekuntia Free/Starter-tasoilla, 190 per 10 sekuntia Pro/Enterprise-tasoilla) päivittäisellä capilla 250 000–1 000 000 välillä. Ansaa: CRM Search on erikseen rajoitettu 4 pyyntöön sekunnissa, ja batch-päätepisteet hyväksyvät enintään 100 tietuetta per pyyntö. HubSpotin käyttöohjeet listaavat tasot.

TasoPer 10sPer sekuntiPäivittäinen capHuomautukset
Free / Starter (yksityinen sovellus)100~10250 000CRM Search erikseen rajoitettu 4 req/s
Pro / Enterprise (yksityinen sovellus)190~19jopa 1 000 000Batch-päätepisteet max 100 tietuetta per pyyntö

Tässä teoria kohtasi punaisen staging-dashboardin. Täytettäessä dataa keväällä pushasimme noin 8 000 olemassa olevaa tietuetta sisäisestä tikettityökalusta HubSpotiin ja rikastimme kutakin CRM Search -haulla. Ajamme @hubspot/api-client v14 Node-puolella ja hubspot-api-client v12 Python-rikastustyöntekijässä. Bulk-kirjoitukset menivät hyvin. Search-kutsut kaatuivat minuutin sisällä, koska työntekijämme ampui Search-pyyntöjä noin 15 req/s nopeudella kovaa 4 req/s kattoa vastaan, jota emme olleet budjetoineet erikseen.

Kaksi muutosta korjasi tilanteen. Ensinnäkin, retry-wrapper, joka lukee X-HubSpot-RateLimit-* vastausotsakkeet ja vetäytyy 429-virheen kohdatessa:

javascript
// Wrap any HubSpot call; retries on 429 with exponential backoff
async function withRetry(fn, maxRetries = 5) {
  let attempt = 0;
  while (true) {
    try {
      return await fn();
    } catch (err) {
      const status = err.code ?? err.response?.status;
      if (status !== 429 || attempt >= maxRetries) throw err;

      // Honor HubSpot's reset window if the header is present
      const headers = err.response?.headers ?? {};
      const resetMs = Number(headers["x-hubspot-ratelimit-interval-milliseconds"]) || 0;
      const backoff = Math.max(resetMs, 2 ** attempt * 500); // 0.5s, 1s, 2s, 4s...

      console.warn(`429 hit, retry ${attempt + 1} in ${backoff}ms`);
      await new Promise((r) => setTimeout(r, backoff));
      attempt++;
    }
  }
}

Toiseksi, lopetimme tietueiden kirjoittamisen yksi kerrallaan. Batch-päätepiste ottaa vastaan jopa 100 tietuetta per POST /crm/v3/objects/{objectType}/batch/create, joten pilkoimme täytön 80 batch-kutsuun 8 000 yksittäisen POSTin sijaan:

javascript
// HubSpot batch endpoints accept at most 100 records per request
function chunk(arr, size = 100) {
  const out = [];
  for (let i = 0; i < arr.length; i += size) out.push(arr.slice(i, i + size));
  return out;
}

// POST /crm/v3/objects/contacts/batch/create, chunked to 100 at a time
async function batchCreateContacts(records) {
  for (const group of chunk(records, 100)) {
    const inputs = group.map((r) => ({
      properties: { email: r.email, firstname: r.firstName, lastname: r.lastName },
      associations: [],
    }));
    await withRetry(() => hubspot.crm.contacts.batchApi.create({ inputs }));
    console.log(`Wrote ${group.length} contacts`);
  }
}

Search-työntekijän rajoittaminen 4 req/s nopeuteen ja kirjoitusten batchaus muutti retryjen hukkuneen ajon hiljaisesti valmistuvaksi. Jos muistat yhden numeron tästä osiosta, olkoon se 4: CRM Search -cap on raja, joka puree tuotannossa, ja se on se, jonka jokainen roundup-postaus unohtaa mainita. Muuten vanha "10 kontaktia" batch-katto on poissa; nykyinen on 100 kaikissa objektityypeissä.

Kaksisuuntaisuus: Muutosten kirjoittaminen takaisin HubSpotiin ilman äärettömiä silmukoita

Kaksisuuntainen synkronointi kirjoittaa muutokset takaisin HubSpotiin sisäisestä työkalustasi samalla kun luet niitä sisään. Vaarana on palautteen antava silmukka: write-back triggeröi juuri sen webhookin, joka laukaisi käsittelijäsi, joka kirjoittaa uudelleen, ikuisesti. Estä se idempotenssiavaimella (ohita muutokset, jotka olet jo soveltanut) ja lähdelipulla (ignore inbound events, jotka oma työkalusi aiheutti).

javascript
const processed = new Set(); // use Redis or a unique DB constraint in production

async function writeBackToHubSpot(record) {
  // Dedup key: object id + a hash of the change we're about to apply
  const key = `${record.id}:${record.updatedHash}`;
  if (processed.has(key)) return; // already synced this exact change
  processed.add(key);

  await withRetry(() =>
    hubspot.crm.contacts.basicApi.update(record.id, {
      // Tag the source so the resulting webhook is ignored by our own receiver
      // (check for source: "internal-tool" before acting on an inbound event)
      properties: { internal_status: record.status, last_sync_source: "internal-tool" },
    })
  );
}

Malli on pieni, mutta sen ohittaminen on tapa, jolla synkronointi hiljaa kaksinkertaistaa kirjoitusvolyymin yössä. Kun data on puhdasta molempiin suuntiin, tiimit syöttävät sitä usein downstreamiin AI SDR -putkeen tai raportointikerrokseen. Nangon HubSpot-integraatio-opetusohjelma on solidi Node-only viite, jos haluat toisen näkökulman kaksisuuntaiseen synkronointiin, vaikka joudutkin porttaamaan silmukanestoisidean itse.

Kannattaako rakentaa tämä in-house vai palkata integraatiokumppani?

Rakenna in-house, kun synkronointi on pieni, vakaa ja omistettu: yksisuuntainen virta, kourallinen objekteja ja insinööri, joka pystyy absorboimaan HubSpotin noin kaksi kertaa vuodessa tapahtuvat breaking changes. Palkkaa kumppani, kun tarvitset kaksisuuntaista synkronointia, mukautettujen objektien mallinnusta tai kun kukaan tiimissä ei voi omistaa jatkuvaa ylläpitoa. Ratkaiseva tekijä on harvoin alustava rakennusvaihe; se on se, kuka valvoo sitä vuoden päästä.

Tässä on rehellinen tarkistuslista. Rakenna itse, jos: suunta on yksisuuntainen, synkronoit standardiobjekteja, sinulla on kehittäjä, joka voi isännöidä webhook-päätepistettä, ja joku huomaa, kun payload alkaa epäonnistua. Kaikki yllä oleva on blueprintsisi.

Palkkaa kumppani, jos: tarvitset kaksisuuntaista synkronointia silmukanestolla useiden objektien yli, mallinnat mukautettuja objekteja typedisillä assosiaatioilla, kytket useita järjestelmiä (HubSpot plus ERP plus laskutus) tai henkilö, joka ylläpitäisi sitä, on jo kapasiteetissaan. HubSpot käyttää päivämääräpohjaista API-versiointia, ja breaking changes tapahtuvat vain noin kaksi kertaa vuodessa, mikä kuulostaa lempeältä, kunnes yksi osuu kiireisimpään viikkoosi eikä omistajaa ole. Juuri tämä ylläpitohäntä, ei ensimmäinen deploy, upottaa hiljaa sisäiset integraatiot. Jos et halua omistaa sitä, tässä tulevat räätälöidyt CRM-integraatiopalvelumme kuvaan.

Keskeiset opit

  • HubSpot API -avainta ei enää ole. Käytä yksityisen sovelluksen käyttöoikeustunnusta yksittäisen tilin sisäiseen työkaluun; OAuth on vain julkisia, useamman tilin sovelluksia varten.
  • Varmenna aina X-HubSpot-Signature-v3 ennen webhook-payloadin luottamista. Rakenna lähdemerkkijono käyttämällä koko kohde-URLia.
  • Kunnioita 4 req/s CRM Search -capia ja batchaa suuret kirjoitukset 100 tietueen erissä 429-backoffilla.
  • Suosi webhookeja pollingin sijaan reaaliaikaiseen synkronointiin, ja HubSpot-integraatio on yksi osa laajempaa AI-työkalujen liiketoimintaan stackia.

Jumissa ylläpidon puolella tai haluatko toiset silmät katsomaan koodia ennen julkaisua? Varaa ilmainen integraatiokonsultaatio. Ei paineita kumpaankaan suuntaan; yllä oleva koodi on sinun ajettavaksesi joka tapauksessa.

Kirjoittajasta

Mert Batur Gurbuz on Techsy.io:n co-founder, jossa tiimi toimittaa AI-agentteja, automaatiojärjestelmiä ja voice/SDR-putkia B2B-asiakkaille. Hän opiskelee Birminghamin yliopistossa ja kirjoittaa LLM-työkalustackista, jota Techsy-tiimi todella käyttää tuotannossa. Meriitit: Co-Founder, Techsy.io, Birminghamin yliopisto. Yhdistä LinkedInissä.

Usein kysytyt kysymykset

Tarvitsenko vielä HubSpot API -avaimen vuonna 2026?

Ei. HubSpot poisti staattiset API-avaimet käytöstä 30. marraskuuta 2022, eikä niitä tueta enää lainkaan. Autocomplete ehdottaa edelleen "hubspot api key" tottumuksesta, mutta haettavaa ei ole. Yksittäisen tilin sisäiseen työkaluun luo yksityinen sovellus Asetuksissa ja käytä sen käyttöoikeustunnusta sen sijaan.

Mikä on ero yksityisen sovelluksen tunnuksen ja OAuthin välillä HubSpotissa?

Yksityisen sovelluksen käyttöoikeustunnus on staattinen tunniste yksittäiselle HubSpot-tilille, ilman vanhenemista ja ilman refresh-virtaa, ihanteellinen sisäiseen työkaluun. OAuth 2.0 on tarkoitettu julkisiin, useamman tilin sovelluksiin, jotka muut yritykset asentavat omiin portaaleihinsa; sen tunnukset vanhenevat noin kuudessa tunnissa ja vaativat refresh-syklin.

Mitkä ovat HubSpotin API rate limitit vuonna 2026?

Yksityiset sovellukset saavat noin 10 pyyntöä sekunnissa (100 per 10 sekuntia Free/Starter-tasoilla, 190 Pro/Enterprise-tasoilla) päivittäisellä capilla 250 000–1 000 000. CRM Search API on erikseen rajoitettu 4 pyyntöön sekunnissa, ja batch-päätepisteet hyväksyvät enintään 100 tietuetta per pyyntö.

Miten varmennan HubSpot webhook-allekirjoituksen?

Käytä v3-reseptiä: hylkää pyynnöt, joissa X-HubSpot-Request-Timestamp on vanhempi kuin viisi minuuttia, rakenna sitten lähdemerkkijono metodista plus koko kohde-URLista plus raaka body plus timestamp. HMAC-SHA256-hashaa se sovellussalaisuudellasi, base64-koodaa tulos ja vertaa sitä X-HubSpot-Signature-v3:een vakioajassa.

Kumpaa HubSpot SDK:ta minun pitäisi käyttää, Nodea vai Pythonia?

Molemmat ovat virallisia ja ylläpidettyjä. Node käyttää @hubspot/api-client (v14) ja Python käyttää hubspot-api-client (v12). Ne paljastavat saman v3 CRM-objektimallin, joten valitse se, joka sopii stackiisi. Tämä opas tarjoaa identtisen auth- ja allekirjoituksen varmennuskoodin molemmilla kielillä.

Miten synkronoin HubSpotin räätälöidyn sisäisen työkalun kanssa reaaliajassa?

Rekisteröi webhook-tilaus yksityiseen sovellukseesi kiinnostavan objektin ja tapahtuman osalta, isännöi sitten HTTPS-päätepistettä, johon HubSpot POSTaa, kun vastaava muutos tapahtuu. Varmenna allekirjoitus ja kirjoita muutos sisäiseen työkaluusi. Käytä pollingia vain, kun mikään webhook-tilaus ei kata tarvitsemaasi.

Mikä on HubSpot Service Key ja pitäisikö minun käyttää sitä?

Service Key on tilikohtainen, vain dataan tarkoitettu tunniste, jonka HubSpot laittoi julkiseen betaan helmikuussa 2026. Se on suunnattu palvelinpuolen ajoihin, jotka koskettavat vain dataa. Standardiin sisäiseen työkaluun tänään yksityisen sovelluksen käyttöoikeustunnus on edelleen turvallisempi ja paremmin dokumentoitu oletusarvo; käsittele Service Keyitä betana, kunnes ne valmistuvat.

Voinko testata HubSpot-integraatiota koskematta tuotantoympäristöä?

Kyllä. Luo HubSpotin kehittäjä-hiekkalaatikko ja osoita yksityisen sovelluksesi tunnus siihen. Scopet, objektimalli, webhookit ja rate limitit toimivat samoin kuin tuotannossa, joten voit luoda testikontakteja ja laukaista webhookeja jättämättä roskatietueita myyntitiimisi siivottavaksi myöhemmin.

Kuinka monta tietuetta HubSpot batch API voi ottaa kerralla?

Batch-päätepisteet (POST /crm/v3/objects/{objectType}/batch/create ja sen update- ja upsert-sisarukset) hyväksyvät enintään 100 tietuetta per pyyntö. Pilko suuremmat payloadit 100 ryhmiin. Vanha "10 tietuetta kontakteille" -katto, jota jotkut opetusohjelmat edelleen siteeraavat, on poistettu; 100 on nykyinen kaikissa objektityypeissä.

Kannattaako rakentaa tämä in-house vai palkata agentti?

Rakenna in-house, kun synkronointi on yksisuuntainen, käyttää standardiobjekteja ja sillä on omistaja, joka pystyy absorboimaan HubSpotin kaksi kertaa vuodessa tapahtuvat breaking changes. Palkkaa kumppani kaksisuuntaiseen synkronointiin, mukautettujen objektien mallinnukseen tai kun kukaan ei voi omistaa ylläpitoa. Ensimmäinen deploy on helppo; sitä seuraava vuoden ylläpito on todellinen kustannus.

Aihepiirit

hubspot api integraatiohubspot yksityinen sovellustunnushubspot webhookitnodepython

Jaa tämä artikkeli

Aiheeseen liittyvät julkaisut

Lisää aiheesta web-development

web-development
Jun 20, 2026

12 Salesforce-vaihtoehtoa pienyrityksille (2026) – mukaan lukien 8, joita kukaan muu ei listaa

Neutraali katsaus 12 Salesforce-vaihtoehtoon pienyrityksille: varmennetut hinnat vuodelle 2026, ostajan päätöspolku ja rehellinen osio siitä, kenen kannattaa pysyä Salesforceissa.

11 min read lukuaika
Lue
web-development
Jun 13, 2026

7 parasta avoimen lähdekoodin CRM-järjestelmää startup-yrityksille (itse isännöity, testattu 2026)

Asensimme ja isännöimme seitsemän avoimen lähdekoodin CRM-järjestelmää oikealle VPS-palvelimelle ja arvioimme ne GitHub-tähtien, lisenssin, rajapinnan ja koodattavan laajennettavuuden perusteella. Vertailussa Twenty, EspoCRM, SuiteCRM, Odoo, Krayin ja muita vaihtoehtoja startup-yrityksille vuonna 2026.

14 min read lukuaika
Lue
web-development
Jun 13, 2026

7 parasta valmistuksen ERP-järjestelmää pienyrityksille (2026, ei jälleenmyyjähypeä)

Oletko kasvanut ulos laskentataulukoista ja QuickBooksista? Vertailemme 7 valmistuksen ERP-järjestelmää pienille työpajoille aidoin vuoden 2026 USD-hinnoin, profiiliin perustuvalla päätöstaulukolla ja rehellisin merkein siitä, milloin räätälöity ratkaisu on todella tarpeen. Ei jälleenmyyjien agendaa.

14 min read lukuaika
Lue
Katso kaikki julkaisut
Aloita projekti

Valmiina rakentamaan jotain erinomainen?

Muutetaan visiosi todellisuudeksi. Tiimimme on valmis auttamaan sinua luomaan ohjelmistoja, joilla on todellinen vaikutus.

Varaa lyhyt suunnittelukeskusteluKatso töitämme

Suosittuja kirjastosta

Claude-taidot

Katso kaikki
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

Tekoäly automatisoinnit

Katso kaikki
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

Suosittuja kirjastosta

Claude-taidot

Katso kaikki
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

Tekoäly automatisoinnit

Katso kaikki
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

Palvelut

  • Yritysratkaisut
  • Mobiilisovellukset
  • Verkkosovellukset

Ratkaisut

  • CRM-järjestelmät
  • Tekoälyintegraatio
  • ERP-ratkaisut
  • Ääniapurarit
  • Prosessien automatisointi
  • Kyberturvallisuus

Kirjasto

  • Blogi
  • Portfolio

Yhteisö

  • Tekoäly automatisoinnit
  • Claude-taidot

Työkalut

  • Mobile sovelluksen hintalaskuri
  • OpenAI / LLM API -hintalaskuri
  • MVP-hintalaskuri
  • Puhe-tekoälyasiamies-hintalaskuri

Yritys

  • Tietoja
  • Kumppanit
  • Ota yhteyttä

Juridiset asiat

  • Tietosuopolitiiikka
  • Käyttöehdot
  • Evästekäytäntö

Palvelut

  • Yritysratkaisut
  • Mobiilisovellukset
  • Verkkosovellukset

Ratkaisut

  • CRM-järjestelmät
  • Tekoälyintegraatio
  • ERP-ratkaisut
  • Ääniapurarit
  • Prosessien automatisointi
  • Kyberturvallisuus

Kirjasto

  • Blogi
  • Portfolio

Yhteisö

  • Tekoäly automatisoinnit
  • Claude-taidot

Työkalut

  • Mobile sovelluksen hintalaskuri
  • OpenAI / LLM API -hintalaskuri
  • MVP-hintalaskuri
  • Puhe-tekoälyasiamies-hintalaskuri

Yritys

  • Tietoja
  • Kumppanit
  • Ota yhteyttä
Juridiset asiatTietosuopolitiiikkaKäyttöehdotEvästekäytäntö
TECHSY
© 2026 Techsy. Kaikki oikeudet pidätetään.