External API docs

Detect tech stack

Start a background technology check for known company domains, check its status, and retrieve the results when it finishes.

Overview

Use this endpoint to detect whether a company uses a specific technology (for example Shopify, HubSpot, or Klaviyo) when you already know the company's domain.

This is a background workflow: submit a batch, check its status, then retrieve the task results.

Before you start

Make sure you have:

  • an Openmart account
  • an API key
  • one or more company domains to check
  • a technology identifier (for example shopify or hubspot)
  • a tool to send API requests, such as Postman or curl

Authentication. We recommend sending your API key as Authorization: Bearer <your_api_key>. If your current integration already uses X-API-Key: <your_api_key>, it will continue to work.

Allow enough time to start the job. The request can take more than 30 seconds to return a batch_id, so set your HTTP client timeout to at least 60 seconds. The enrichment then continues in the background. If your app times out, check whether it saved a batch ID before starting the same job again.

1

Example 1: Detect Shopify usage for a domain

Use this example to check one company domain for one technology.

Endpoint
POST https://api.openmart.ai/api/v1/task/batch/find_tech

Parameters

Parameter
domain
Type
string
Required
Yes
Example
"bluebottlecoffee.com"
Description
The company domain to check.
Parameter
tech_type
Type
string
Required
Yes
Example
"shopify"
Description
The technology identifier to detect.
Parameter
company_name
Type
string
Required
No
Example
"Blue Bottle Coffee"
Description
Optional company name hint to improve matching.

cURL request

cURL
curl --request POST \
  --url https://api.openmart.ai/api/v1/task/batch/find_tech \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <your_api_key>' \
  --header 'Content-Type: application/json' \
  --data '[
    {
      "domain": "bluebottlecoffee.com",
      "company_name": "Blue Bottle Coffee",
      "tech_type": "shopify"
    }
  ]'

Response details

This request returns a batch_id. Poll batch status until ready, then fetch task results by task ID.

Key elements of the API response

Response element
batch_id
Description
The ID for this batch. Keep the submission request open long enough to read it; use a client timeout of at least 60 seconds.
Response element
submit_for
Description
The task type submitted (for example find_tech).
Response element
status.batch_ready
Description
When true, the batch has produced task IDs and you can fetch results.
2

Example 2: Check multiple domains in one batch

Use this example to submit multiple tasks in one batch so you can process domains together.

Endpoint
POST https://api.openmart.ai/api/v1/task/batch/find_tech

Parameters

Parameter
domain
Type
string
Required
Yes
Example
"allbirds.com"
Description
The company domain to check.
Parameter
tech_type
Type
string
Required
Yes
Example
"hubspot"
Description
The technology identifier to detect.
Parameter
tracking_id
Type
string
Required
No
Example
"allbirds-hubspot"
Description
Optional client-defined ID to correlate results later.

cURL request

cURL
curl --request POST \
  --url https://api.openmart.ai/api/v1/task/batch/find_tech \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <your_api_key>' \
  --header 'Content-Type: application/json' \
  --data '[
    {
      "domain": "bluebottlecoffee.com",
      "tech_type": "hubspot",
      "tracking_id": "bluebottle-hubspot"
    },
    {
      "domain": "allbirds.com",
      "tech_type": "hubspot",
      "tracking_id": "allbirds-hubspot"
    }
  ]'

All request parameters

Request body for POST /api/v1/task/batch/find_tech. Send a JSON array of task objects. Each field below describes a property on one task object.

Most common parameters

These are the fields most teams set for day-to-day technology detection.

domainstringRequired: Yes
Example: "bluebottlecoffee.com"

Company domain to check.

cURL example
cURL
curl --request POST \
  --url https://api.openmart.ai/api/v1/task/batch/find_tech \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <your_api_key>' \
  --header 'Content-Type: application/json' \
  --data '[{"domain":"bluebottlecoffee.com","tech_type":"shopify"}]'
tech_typestringRequired: Yes
Example: "shopify"

Technology identifier to detect.

cURL example
cURL
curl --request POST \
  --url https://api.openmart.ai/api/v1/task/batch/find_tech \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <your_api_key>' \
  --header 'Content-Type: application/json' \
  --data '[{"domain":"bluebottlecoffee.com","tech_type":"shopify"}]'
company_namestringRequired: No
Example: "Blue Bottle Coffee"

Optional company name hint to improve matching.

cURL example
cURL
curl --request POST \
  --url https://api.openmart.ai/api/v1/task/batch/find_tech \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <your_api_key>' \
  --header 'Content-Type: application/json' \
  --data '[{"domain":"bluebottlecoffee.com","company_name":"Blue Bottle Coffee","tech_type":"shopify"}]'

Optional metadata

Use these fields to correlate responses back to your internal records.

tracking_idstringRequired: No
Example: "customer-42"

Optional client-defined tracking key returned with results.

cURL example
cURL
curl --request POST \
  --url https://api.openmart.ai/api/v1/task/batch/find_tech \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <your_api_key>' \
  --header 'Content-Type: application/json' \
  --data '[{"domain":"bluebottlecoffee.com","tech_type":"shopify","tracking_id":"customer-42"}]'

If this request fails

Match the error number or message in the response, then use the action below.

Error 400 / 422“... is required” or another field error
Read the error or detail field, then fix the named input.
Error 401“Invalid API Key”
Check the complete key and authentication header.
Error 402“Credit limit reached”
Check the team balance before trying again.
Error 403“Forbidden” or “not allowed”
Check whether this key and account can use the action.
Error 404“Not Found”
Check the API address, version, and GET, POST, or DELETE method.
Error 429“Too many requests”
Wait, then retry with fewer requests running at once.
Error 500–504Server error or timeout
Wait briefly and retry. Avoid duplicating an async job.

See Troubleshooting & FAQ for step-by-step help and the information to include when asking for support.