Skip to content

API reference

The Humind public API lets you push your catalog into Humind from any stack. Authenticate with a single API key per environment, send JSON over HTTPS, get back JSON. No SDK to install, no Shopify required. Optional webhooks push notifications back to you instead of polling.

This is the integration path if you're not on Shopify. If you are, install the Humind Shopify app instead. It syncs everything automatically and you can ignore this section.

What you can do

  • Products: create, update, list, archive products and their variants. See Products.
  • Collections: group products into collections so the assistant can narrow recommendations. See Collections.
  • Knowledge: push FAQs, sizing guides, return policies, and other free-form content the assistant can ground its answers on. See Knowledge.
  • Translations: patch per-locale titles, descriptions, and handles one locale at a time as a sub-resource on products, collections, and knowledge entries. See Products / Translations, Collections / Translations, Knowledge / Translations.
  • Variants: manage a single product variant without resending the full product. See Products / Variants.
  • Imports: bulk NDJSON uploads for the initial sync of large catalogs. See Imports.
  • Webhooks: subscribe to import events (import.completed, import.failed). See Webhooks.

Base URL

https://api.thehumind.com/public/v1

All endpoints are versioned under /public/v1. Breaking changes ship under a new prefix (/public/v2) and the previous version stays live during the migration window. See Versioning.

Quick start

Already have a key? Push your first product:

bash
curl -X POST https://api.thehumind.com/public/v1/products \
  -H "Authorization: Bearer hmd_live_REPLACE_WITH_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "SKU-123",
    "title": "Hydrating face cream",
    "handle": "hydrating-face-cream",
    "status": "active",
    "default_language": "fr",
    "variants": [
      { "external_id": "SKU-123-50ML", "title": "50 ml", "price": 29.90, "currency": "EUR" }
    ]
  }'

You'll get back 201 Created for new products, 200 OK when updating an existing one (matched by external_id). The response carries the full product object including the humind_id Humind assigned.

Sandbox: use a hmd_test_* API key from your dashboard to develop against test data without touching your live catalog. See Authentication.

Don't have a key yet? See Authentication to generate one from your dashboard.

OpenAPI specification

The full machine-readable spec is downloadable here:

Import it in Postman, Insomnia, Bruno, or any client that speaks OpenAPI 3.0 to get a pre-built collection of every endpoint with example payloads.

Routes at a glance

All paths are relative to https://api.thehumind.com/public/v1. Every write request requires an Idempotency-Key header. See the per-resource pages for full schemas, examples, and error tables.

ResourceMethodPathScopePurpose
ProductsPOST/productscatalog:writeCreate or upsert a product
ProductsPOST/products/batchcatalog:writeUpsert up to 500 products
ProductsGET/productscatalog:readList products
ProductsGET/products/{id}catalog:readRetrieve a product
ProductsPUT/products/{id}catalog:writeReplace a product
ProductsPATCH/products/{id}catalog:writePartially update a product
ProductsDELETE/products/{id}catalog:writeArchive or hard-delete a product
ProductsPUT/products/{id}/variants/{external_id}catalog:writeUpsert a variant
ProductsDELETE/products/{id}/variants/{external_id}catalog:writeRemove a variant
ProductsPUT/products/{id}/translations/{lang}catalog:writeUpsert a translation
ProductsDELETE/products/{id}/translations/{lang}catalog:writeRemove a translation
CollectionsPOST/collectionscatalog:writeCreate or upsert a collection
CollectionsPOST/collections/batchcatalog:writeUpsert up to 500 collections
CollectionsGET/collectionscatalog:readList collections
CollectionsGET/collections/{id}catalog:readRetrieve a collection
CollectionsPUT/collections/{id}catalog:writeReplace a collection
CollectionsPATCH/collections/{id}catalog:writePartially update a collection
CollectionsDELETE/collections/{id}catalog:writeArchive or hard-delete a collection
CollectionsPUT/collections/{id}/translations/{lang}catalog:writeUpsert a translation
CollectionsDELETE/collections/{id}/translations/{lang}catalog:writeRemove a translation
KnowledgePOST/knowledgeknowledge:writeCreate or upsert a knowledge item
KnowledgePOST/knowledge/batchknowledge:writeUpsert up to 500 items
KnowledgeGET/knowledgeknowledge:readList knowledge items
KnowledgeGET/knowledge/{id}knowledge:readRetrieve an item
KnowledgePUT/knowledge/{id}knowledge:writeReplace an item
KnowledgePATCH/knowledge/{id}knowledge:writePartially update an item
KnowledgeDELETE/knowledge/{id}knowledge:writeArchive or hard-delete an item
KnowledgePUT/knowledge/{id}/translations/{lang}knowledge:writeUpsert a translation
KnowledgeDELETE/knowledge/{id}/translations/{lang}knowledge:writeRemove a translation
KnowledgePOST/knowledge/{id}/file-upload-urlknowledge:writeMint a SAS URL for a file upload
KnowledgePOST/knowledge/{id}/file-upload-completedknowledge:writeFinalise a file upload
ImportsPOST/importsimports:writeCreate an import + get upload URL
ImportsGET/imports/{sync_id}imports:writePoll an import's status
ImportsPOST/imports/{sync_id}/startimports:writeStart processing an uploaded import
ImportsPOST/imports/{sync_id}/cancelimports:writeCancel a pending or running import
WebhooksPOST/webhooks/endpointswebhooks:manageRegister an endpoint
WebhooksGET/webhooks/endpointswebhooks:manageList endpoints
WebhooksGET/webhooks/endpoints/{id}webhooks:manageRetrieve an endpoint
WebhooksPATCH/webhooks/endpoints/{id}webhooks:manageUpdate an endpoint
WebhooksDELETE/webhooks/endpoints/{id}webhooks:manageDelete an endpoint
WebhooksPOST/webhooks/endpoints/{id}/rotate-secretwebhooks:manageRotate the signing secret
WebhooksGET/webhooks/deliverieswebhooks:manageList recent deliveries
WebhooksGET/webhooks/deliveries/{id}webhooks:manageInspect a delivery

SDKs

None today. The API is designed to be flat enough that any HTTP client works:

  • cURL for one-shots and shell scripts
  • fetch in Node, browsers, Deno, Bun
  • requests in Python
  • http.Client in Go
  • Any other JSON-over-HTTPS client

If you'd like a typed SDK in your language of choice, reach out to support. Tell us what language matters most to you.

Status & changelog

Next

  • Authentication: generate, use, and rotate keys.
  • Conventions: request format, identifiers, idempotency, versioning.
  • Errors: error format, HTTP codes, Humind error codes.
  • Rate limits: current per-key limits, the 429 response, backoff.
  • Products: push your catalog.
  • Collections: group products for narrower assistant recommendations.
  • Knowledge: push the content the assistant grounds its answers on.
  • Imports: async NDJSON ingestion for large catalogs.
  • Webhooks: receive signed event deliveries instead of polling.

Released under the proprietary Humind license.