ForHosting KIT · Text & AI

Product attributes

A supplier description like 'Camiseta algodón orgánico, talla M, azul marino' contains four filterable attributes buried in a sentence, and your storefront's filter sidebar needs them as separate fields, not prose. This endpoint reads free-text product copy and pulls out colour, size, material, brand and other structured attributes so faceted search works without a human retyping every listing.

● StablePer request + per item$0.003
Use it from WebAPIEmailApp soonTelegram soon

Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.

The gap between prose and filters

Product descriptions are written to sell, not to populate a database — a copywriter says 'a soft cotton tee in navy, true to size' when your filter sidebar needs colour: navy, material: cotton, fit: true-to-size as three separate fields. That translation step, done manually across a catalog of any real size, is the single biggest reason faceted search on smaller storefronts feels broken: half the inventory simply has empty attribute fields because nobody had time to fill them in.

What the endpoint expects and returns

POST an array of product texts — title plus description, or just one field if that's all you have — to /text/product-attributes, optionally specifying which attributes you care about (colour, size, material, brand, pattern, and so on). The task runs async: a task_id comes back immediately, and the structured attribute set per product lands at your signed webhook or a signed link valid for 24 hours, with each attribute value normalized to a consistent form so 'navy', 'dark blue' and 'azul marino' all resolve the same way in your filters.

The reasoning behind extraction

It reads the full text rather than pattern-matching isolated keywords, which matters because attributes hide in awkward places — 'available in the classic oak finish' names a colour without the word 'color' anywhere nearby, and a brand can appear as a trademark symbol tucked mid-sentence rather than as a labeled field. The extraction mirrors how a careful catalog editor reads a description end to end before deciding what goes in each column, just done at the speed a feed import actually needs.

Where this fits an automated catalog

Because it's metered per item and delivered asynchronously, it slots naturally into a PIM enrichment step or a bulk import job: pull raw supplier text, extract structured attributes in one batch call, and write the results straight into your product schema without a manual QA pass on every row. Marketplaces onboarding third-party sellers particularly lean on this, since seller-submitted descriptions vary wildly in how much structure they contain.

What it won't invent

If an attribute genuinely isn't mentioned in the text — no material is stated anywhere in the description — the field returns empty rather than a fabricated guess, because a false 'material: cotton' on a product that's actually polyester creates a return, not a sale. That restraint is deliberate: extraction only surfaces what's actually written, leaving true gaps for your team to fill from a spec sheet or supplier follow-up.

Faceted search enrichment

Backfill colour, size and material fields across an old catalog so filter sidebars actually narrow results instead of sitting mostly empty.

Marketplace seller listings

Extract structured attributes from free-text descriptions submitted by third-party sellers before their listings go live.

Supplier feed normalization

Pull consistent attribute values out of inconsistent supplier copy so the same colour isn't stored as three different strings.

Comparison and recommendation engines

Feed structured attributes into a 'similar products' algorithm that needs actual fields, not paragraphs, to compare items.

What attributes can the product attribute extraction API pull out?

Common ones include colour, size, material and brand, and you can specify additional attributes like pattern or fit in the request if your catalog needs them.

Does it work if the description is short or informal?

Yes, it reads whatever free text you provide, from a full paragraph down to a single title line, and returns only the attributes it can actually find.

Is there a free tier?

There's no free tier — free tiers get abused and slow everyone down. Access runs on a prepaid ForHosting KIT balance: top up from $10.00 (it never expires) and each request is charged at its published price, so a call with no balance returns HTTP 402. No subscription, no tokens, no invented credits, and a failed task is never charged.

What's the price for extracting attributes in bulk?

$0.003 per request plus $0.0135 per item, so a catalog of any size has a fixed, predictable cost you can compute in advance.

How are results returned?

The task is asynchronous: you get a task_id right away and the extracted attributes arrive via your signed webhook or a signed link valid for 24 hours.

What happens if an attribute isn't mentioned in the text?

The field is left empty rather than guessed, so you know exactly which products still need a manual check instead of trusting a fabricated value.

Does it normalize values like colour names?

Yes, equivalent expressions such as 'navy' and 'azul marino' resolve to a consistent value so your filters don't fragment into near-duplicate options.

Can I extract attributes for a whole catalog at once?

Yes, sending a full product array in one bulk request is the normal pattern, with pricing scaling per item and no arbitrary batch limit.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/text/product-attributes

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.

curl -X POST https://api.kit.forhosting.com/text/product-attributes \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":["valor-1","valor-2"]}'
{
  "items": [
    "valor-1",
    "valor-2"
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "text.product_attributes",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.003
Per item$0.0135

Published price — no tokens, no invented credits. A failed task is never charged.

max_tokens20000
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.
422task_failedThe task failed after 3 retries. You are never charged for it.

Read the full KIT documentation →