Company profile
Your company profile — categories, geography, certifications, exclusions, manufacturer partners, target buyers, overview, business role, Canadian-supplier status, employee count, and contract-value range — is what Prok scores every opportunity against. Prok keeps it current by reading what you tell it, in email replies and in portal feedback, and applying durable facts automatically. Every change it makes is logged, and every change can be undone.
You can also change it yourself, in the portal or with PATCH /api/v1/profile:
see Editing your company profile.
This page covers the changes Prok makes on its own, and the history and revert
rules that apply to both.
Reading the profile
Section titled “Reading the profile”curl "https://app.prokure.ca/api/v1/profile" \ -H "Authorization: Bearer $PROKURE_API_KEY"Requires profile:read. Returns the profile as it stands right now — the
same fields the portal’s Company Profile page renders, employee_count
included.
How Prok changes it
Section titled “How Prok changes it”Prok doesn’t ask before editing your profile — it applies changes and tells you afterward. Two things can trigger an edit:
- Replying to an email — a digest reply or any reply to Prok that states a durable fact (“we don’t work with Vertex anymore,” “we just got ISO 9001,” “our minimum contract is 50k”).
- Portal feedback — agreeing or disagreeing with a match and giving a reason that states the same kind of fact.
Both channels run the same extraction and the same limits: at most 10 field changes are applied per email or per feedback submission — anything past that is skipped and called out as skipped, not silently dropped. Facts that don’t map to a profile field become a learned rule instead (see Learned rules); only ones that do become a profile change.
Adding and removing
Section titled “Adding and removing”Categories, geography, certifications, exclusions, manufacturer partners, and target buyers are lists. Adding appends the value. Removing requires an exact match, case-insensitive, against what’s already on the list — Prok will not guess which entry you meant. Asking to remove something that isn’t there is a no-op, and the confirmation tells you what the field currently holds instead of pretending it worked.
Adding a manufacturer partner only adds the name — it does not onboard their catalog. A newly added partner has no products yet and does not affect scoring until you separately onboard their catalog, which you do on the Product catalog page (where you can also add the partner in the first place). Removing one is different: if that partner has catalog products on file, removing them deactivates every one of those products in the same action, so they stop counting toward match scores immediately. Reverting the removal reactivates the same partner and the same products.
Setting a value
Section titled “Setting a value”Overview, business role, Canadian-supplier status, employee count, and the minimum/maximum contract value are single values, set outright (including clearing one back to empty). A minimum/maximum pair that would put the minimum above the maximum is rejected rather than applied.
The confirmation email
Section titled “The confirmation email”After processing a reply, Prok sends back a confirmation listing what it did line by line — what was added, removed, or set, what was skipped and why, and any manufacturer-partner cascade. If anything actually changed, the email ends with:
Reply "undo" to revert these profile changes.Replying undo to that specific email reverts every change it listed, in one
pass, and Prok replies again in the same thread with the outcome for each —
reverted, or the reason it couldn’t be (see below). undo only works as a
reply to the confirmation email itself; sent anywhere else, Prok replies that
it can’t find profile changes tied to that thread and points you at the
confirmation email or the portal instead.
Change history
Section titled “Change history”curl "https://app.prokure.ca/api/v1/profile/changes" \ -H "Authorization: Bearer $PROKURE_API_KEY"Requires profile:read. Returns every change, newest first, 20 per page:
{ "changes": [ { "id": "b4b6b8b0-...", "field": "certifications", "value_before": ["ISO 9001"], "value_after": ["ISO 9001", "CGP"], "cascade_summary": { "products_deactivated": 0, "products_reactivated": 0 }, "source": "email_feedback", "created_at": "2026-08-20T14:03:11.000Z", "reverted": false, "revertible": true } ], "next_cursor": null}| Field | Meaning |
|---|---|
field |
Which profile field changed. |
value_before / value_after |
The field’s value on either side of the change — a list for list fields, a scalar (or null) for the rest. |
cascade_summary |
Catalog products deactivated or reactivated as a side effect of this change (manufacturer-partner removals and their reverts only — everything else reports zeros). |
source |
Where the change came from: email_feedback, portal_feedback, portal_revert, email_undo, portal_edit (an edit you made in the portal or through PATCH /api/v1/profile, shown as You — portal edit), or portal_import (a catalog import, shown as You — catalog import). |
reverted |
Whether this change has since been reverted. |
revertible |
Whether POST .../revert will currently succeed on this id — see below. |
Page past the first 20 with next_cursor:
curl "https://app.prokure.ca/api/v1/profile/changes?cursor=$NEXT_CURSOR" \ -H "Authorization: Bearer $PROKURE_API_KEY"Reverting a change
Section titled “Reverting a change”curl -X POST "https://app.prokure.ca/api/v1/profile/changes/$ID/revert" \ -H "Authorization: Bearer $PROKURE_API_KEY"Requires profile:write. A revert is itself a new, ordinary profile change
— it writes the field back to its prior value (undoing a manufacturer-partner
cascade too, where one applied), and a successful call returns that new
change, not the one you reverted. The original row is left in place with
reverted: true.
Only the latest unreverted change to a field can be reverted — revertible
in the change-history response tells you which id that is for each field
without your having to work it out. Calling revert on any other id fails:
| Status | error |
Meaning |
|---|---|---|
404 |
not_found |
No change with this id. |
409 |
already_reverted |
This change was reverted already. |
409 |
superseded |
The field has changed again since — this is no longer the latest change to it, so reverting it would clobber something newer. |
This is the same rule the portal’s Company Profile page enforces in its UI (only the newest entry per field offers a revert control) — the API rejects it independently rather than trusting the client to have checked first.