Skip to content

AI in pcreative Commerce

Everything AI is optional and runs on your key, not ours.

  • Keys live in your server’s .env. They are not stored in the database, do not travel to the panel and do not appear in any log.
  • You call the provider you choose. We do not see your data and do not charge you per query: there is no middleman.
  • Without keys, the store works. It tells you what needs AI.
Works How
Store search By keyword and by letter similarity
Related products With the index already computed
Review summary Whichever was already saved
MCP server Full catalogue for AI agents
Panel alerts They are queries, not AI
Support inbox Receives and replies; what is missing is the draft

Writing product copy and translations, the panel copilot, the support drafts, and the part of search that understands natural language.

Each one fails saying which variable is missing. Nothing breaks for not setting it.

  1. Choose a provider in AI → Connectors. There are six for chat and seven for embeddings, including Ollama, which runs on your machine and costs no money.
  2. Put the key in the backend .env and restart:
ANTHROPIC_API_KEY=... # or OPENAI_API_KEY, GOOGLE_API_KEY,
# MISTRAL_API_KEY, OPENROUTER_API_KEY,
# VOYAGE_API_KEY, COHERE_API_KEY
OLLAMA_URL=http://localhost:11434 # only if you use Ollama
  1. Hit Test chat. If the key is no good, it tells you the reason the provider gives.

Every call is logged with what it cost, under AI → Spend, broken down by task. The prices are an estimate: if you use a model that is not in our table, the figure comes up short and you are warned.

There is a daily cap, and it comes set. The default is €5 a day. Once it is passed, whatever costs money stops calling the provider: search keeps working on keywords and the rest warns. To change it, in the store metadata:

{ "ai": { "limite_diario_eur": 20 } }

It is there because search is public: without a cap, a loop of queries against your store is money leaving your account. There is also a per-visitor limit, of 20 searches per minute.

By design, and it cannot be turned off:

  • The copilot changes nothing. It proposes; you apply, seeing the exact values that would change.
  • Support drafts are not sent on their own. Sending is another button.
  • Product pages are not saved on their own. The proposal is shown next to what is there, with the real data it used.
  • There is a claims firewall: if generated text says something cures, prevents or is guaranteed, it is flagged and does not publish itself.

This is software you install on your own server. With your key, your data and your customers, you are the one responsible. Specifically:

  • The provider’s bill. Set the daily cap to suit your store.
  • Reviewing what gets published. The firewall helps, but it is no substitute for reading it. Especially if you sell regulated products.
  • Data protection. Your customers’ support messages and orders are personal data that you answer for. The program ships with the tools in place (see below), but deciding the retention period and handling deletion requests is yours. Bear in mind too that the AI provider you choose processes those texts: look at where it is and what it signs with you.
  • Saying it is AI. If you turn on automatic replies to customers, EU rules require the person to know they are talking to a machine. Today support works as “the AI drafts, you send”, so it does not apply; the day that changes, it does.

We leave the system set up and with the brakes on. What you do with it, and with which provider, is up to you.

A support conversation carries a person’s email, what they bought and what they told you. Keeping it forever is not allowed, so the system deletes on its own.

  • Every night at 4am, resolved conversations older than 12 months are deleted. Open ones are NOT touched, however old: an open one is someone waiting for an answer.
  • To change the period, in the store metadata:
{ "soporte": { "meses_retencion": 6 } }
  • If a customer asks you to delete their data, you have the Delete data button in the conversation, or POST /admin/soporte/borrar with {"email": "..."} to delete everything of theirs at once, open or closed.

It is deleted for real: the row is not marked as deleted, it disappears. A deletion that leaves the email and the text in the database is not a deletion.