
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ötarkoitus | Vanheneeko tai refresh? | Sopii parhaiten |
|---|---|---|---|
| API-avain | Poistettu | Poistettu käytöstä marraskuussa 2022 | Ei mihinkään, on deprecated |
| Yksityisen sovelluksen käyttöoikeustunnus | Yksittäisen tilin sisäinen työkalu | Ei, staattinen, ei refreshiä | Sisäinen työkalusi, oletusvalinta tässä |
| OAuth 2.0 | Julkinen tai useamman tilin sovellus | Kyllä, tunnukset vanhenevat noin 6 tunnissa ja vaativat refreshin | Sovellukset, jotka listaat muiden yritysten portaaleihin |
| Service Key (julkinen beta, helmikuu 2026) | Tilikohtainen, vain dataan tarkoitettu tunniste | Tilikohtainen, dokumentaation mukaan | Vain 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):
// 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):
# 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ä:
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:
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:
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.
| Taso | Per 10s | Per sekunti | Päivittäinen cap | Huomautukset |
|---|---|---|---|---|
| Free / Starter (yksityinen sovellus) | 100 | ~10 | 250 000 | CRM Search erikseen rajoitettu 4 req/s |
| Pro / Enterprise (yksityinen sovellus) | 190 | ~19 | jopa 1 000 000 | Batch-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:
// 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:
// 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).
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-v3ennen 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.