OpenMercantil · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for OpenMercantil User API

66 actions 66 updates phrasing extends openapi/openmercantil-user-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for OpenMercantil's API. It is a proposal applied on top of the contract, not a document OpenMercantil publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 66 · first 16 shown; the file carries all of them

$.info
$.paths['/api/v1/user/me'].get
$.paths['/api/v1/user/org'].get
$.paths['/api/v1/user/org'].put
$.paths['/api/v1/user/org'].post
$.paths['/api/v1/user/org/invites'].post
$.paths['/api/v1/user/org/invites/{id}/resend'].post
$.paths['/api/v1/user/org/invites/{id}'].delete
$.paths['/api/v1/user/org/members/{id}'].put
$.paths['/api/v1/user/org/members/{id}'].delete
$.paths['/api/v1/user/org/leave'].post
$.paths['/api/v1/user/persona'].get
$.paths['/api/v1/user/persona'].post
$.paths['/api/v1/user/segments'].get
$.paths['/api/v1/user/segments'].post
$.paths['/api/v1/user/segments/{id}'].get

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for OpenMercantil User API
  version: 1.0.0
extends: openapi/openmercantil-user-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-09-26'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 65
- target: $.paths['/api/v1/user/me'].get
  update:
    x-apievangelist-phrasing:
      intent: Get my account profile and plan
      effect: read
      questions:
      - Which plan tier is my OpenMercantil account on?
      - Where do I get a fresh CSRF token together with my user profile?
      instructions:
      - text: Show my account profile, plan and persona.
      - text: Tell me whether my account has finished onboarding.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org'].get
  update:
    x-apievangelist-phrasing:
      intent: Get my organization, seats and members
      effect: read
      questions:
      - Which team members and seats does my organization have?
      - Can I create a team on my current plan if I don't belong to an organization yet?
      instructions:
      - text: Show my organization with its seats and visible members.
      - text: List the people in my team.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org'].put
  update:
    x-apievangelist-phrasing:
      intent: Rename my organization
      effect: write
      questions:
      - How do I change the name of my organization?
      - Who is allowed to rename the organization?
      instructions:
      - text: Rename my organization to {name}.
        slots:
          name: requestBody.name
      - text: Change our team's display name to {name}.
        slots:
          name: requestBody.name
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org'].post
  update:
    x-apievangelist-phrasing:
      intent: Create an organization
      effect: write
      questions:
      - Can I set up a team organization on a MAX or Enterprise plan?
      - What happens to my role when I start a new organization?
      instructions:
      - text: Create a new organization called {name} with me as owner.
        slots:
          name: requestBody.name
      - text: Start a team named {name}.
        slots:
          name: requestBody.name
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org/invites'].post
  update:
    x-apievangelist-phrasing:
      intent: Invite someone to my organization
      effect: write
      questions:
      - How do I invite a colleague to join my organization?
      - Is there a daily limit on organization invitations or a seat cap?
      instructions:
      - text: Invite {email} to my organization.
        slots:
          email: requestBody.email
      - text: Invite {email} to the team as {role}.
        slots:
          email: requestBody.email
          role: requestBody.role
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org/invites/{id}/resend'].post
  update:
    x-apievangelist-phrasing:
      intent: Resend an organization invitation
      effect: write
      questions:
      - My colleague lost their invite email; can I send the organization invitation again?
      - Does resending an invitation invalidate the old invite link?
      instructions:
      - text: Resend organization invitation {id}.
        slots:
          id: path.id
      - text: Rotate the token on invite {id} and email it again.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org/invites/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Cancel a pending organization invitation
      effect: destructive
      questions:
      - How do I withdraw an invitation that hasn't been accepted yet?
      - Can an admin cancel a pending team invite?
      instructions:
      - text: Cancel pending invitation {id}.
        slots:
          id: path.id
      - text: Withdraw the team invite {id} before it's accepted.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org/members/{id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Change a team member's role
      effect: write
      questions:
      - How do I promote a team member to admin?
      - Can the organization owner's own role be changed?
      instructions:
      - text: Change member {id}'s role to {role}.
        slots:
          id: path.id
          role: requestBody.role
      - text: Make organization member {id} a {role}.
        slots:
          id: path.id
          role: requestBody.role
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org/members/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove a member from my organization
      effect: destructive
      questions:
      - How do I remove someone from my organization?
      - Can an admin remove another admin or the owner?
      instructions:
      - text: Remove member {id} from the organization.
        slots:
          id: path.id
      - text: Kick {id} off our team.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/org/leave'].post
  update:
    x-apievangelist-phrasing:
      intent: Leave my current organization
      effect: destructive
      questions:
      - How do I leave the organization I belong to?
      - Can an owner leave the organization without transferring ownership first?
      instructions:
      - text: Take me out of my current organization.
      - text: Leave the organization using CSRF token {csrf_token}.
        slots:
          csrf_token: header.X-CSRF-Token
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/persona'].get
  update:
    x-apievangelist-phrasing:
      intent: See my persona and the available personas
      effect: read
      questions:
      - Which persona is my account set to?
      - What personas can I choose from?
      instructions:
      - text: Show my current persona and the list I can pick from.
      - text: List the available account personas.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/persona'].post
  update:
    x-apievangelist-phrasing:
      intent: Set my primary persona
      effect: write
      questions:
      - How do I switch my account to a different persona?
      - Which values are valid when setting my primary persona?
      instructions:
      - text: Set my primary persona to {persona}.
        slots:
          persona: requestBody.persona
      - text: Switch my account persona to {persona}.
        slots:
          persona: requestBody.persona
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments'].get
  update:
    x-apievangelist-phrasing:
      intent: List my saved company segments
      effect: read
      questions:
      - Which saved company segments have I built?
      - Can I show only my pinned segments?
      instructions:
      - text: List my saved segments.
      - text: Show my segments filtered by pinned = {pinned}, up to {limit}.
        slots:
          pinned: query.pinned
          limit: query.limit
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments'].post
  update:
    x-apievangelist-phrasing:
      intent: Save a new company segment
      effect: write
      questions:
      - How do I save a reusable filter of companies by province or CNAE prefix?
      - What filter anchor does a new segment need, and why would it be rejected with 422?
      instructions:
      - text: Create a segment called {name} with filters {filters}.
        slots:
          name: requestBody.name
          filters: requestBody.filters
      - text: Save segment {name}, described as {description}, using filters {filters}, and pin it.
        slots:
          name: requestBody.name
          description: requestBody.description
          filters: requestBody.filters
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one saved segment
      effect: read
      questions:
      - What filters are stored in one of my segments?
      - Can I look up a single segment's definition by its id?
      instructions:
      - text: Get segment {id}.
        slots:
          id: path.id
      - text: Show the filters saved in segment {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments/{id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Replace a segment's editable fields
      effect: write
      questions:
      - How do I overwrite a segment's name, description and filters all at once?
      - Can I fully replace an existing segment definition?
      instructions:
      - text: Replace segment {id} with name {name} and filters {filters_json}.
        slots:
          id: path.id
          name: requestBody.name
          filters_json: requestBody.filters_json
      - text: Overwrite all mutable fields of segment {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a saved segment
      effect: destructive
      questions:
      - How do I get rid of a segment I no longer use?
      - Is deleting a saved segment permanent?
      instructions:
      - text: Delete segment {id}.
        slots:
          id: path.id
      - text: Remove the saved company segment {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments/{id}'].patch
  update:
    x-apievangelist-phrasing:
      intent: Edit selected fields of a segment
      effect: write
      questions:
      - Can I tweak just one field of a segment, like its icon, without resending the rest?
      - How do I rename a segment and leave its filters untouched?
      instructions:
      - text: Rename segment {id} to {name}, leaving the other fields as they are.
        slots:
          id: path.id
          name: requestBody.name
      - text: Change only the icon of segment {id} to {icon}.
        slots:
          id: path.id
          icon: requestBody.icon
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments/{id}/pin'].post
  update:
    x-apievangelist-phrasing:
      intent: Pin or unpin a segment
      effect: write
      questions:
      - How do I pin a segment to the top of my list?
      - Does the pin action toggle, so calling it again unpins?
      instructions:
      - text: Toggle the pin on segment {id}.
        slots:
          id: path.id
      - text: Unpin segment {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/segments/{id}/run'].post
  update:
    x-apievangelist-phrasing:
      intent: Run a segment to get matching companies
      effect: read
      questions:
      - Which companies match my saved segment right now?
      - What's the most companies a segment run can return, and is the count a global total?
      instructions:
      - text: Run segment {id} and return the matching companies.
        slots:
          id: path.id
      - text: Execute segment {id}, capped at {limit} companies.
        slots:
          id: path.id
          limit: query.limit
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists'].get
  update:
    x-apievangelist-phrasing:
      intent: List my saved lists
      effect: read
      questions:
      - What lists of companies and people have I saved?
      - Where can I see all my watchlists at once?
      instructions:
      - text: Show all my lists.
      - text: List my saved watchlists.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a list
      effect: write
      questions:
      - How do I start a new watchlist to track companies?
      - Can I give a new list a color and a kind?
      instructions:
      - text: Create a list named {name}.
        slots:
          name: requestBody.name
      - text: Create a {kind} list called {name} colored {color}.
        slots:
          kind: requestBody.kind
          name: requestBody.name
          color: requestBody.color
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get a list and its items
      effect: read
      questions:
      - Which companies are inside one of my lists?
      - Can I open a single list with all its entries?
      instructions:
      - text: Get list {id} with its items.
        slots:
          id: path.id
      - text: Show everything saved in list {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists/{id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Replace a list's editable fields
      effect: write
      questions:
      - How do I overwrite a list's name, description, color and kind in one go?
      - Can I fully replace the settings of an existing list?
      instructions:
      - text: Replace list {id} settings with name {name}, color {color} and kind {kind}.
        slots:
          id: path.id
          name: requestBody.name
          color: requestBody.color
          kind: requestBody.kind
      - text: Overwrite all mutable fields on list {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a list and its items
      effect: destructive
      questions:
      - What happens to the items when I delete a list?
      - How do I remove an entire watchlist?
      instructions:
      - text: Delete list {id} along with its items.
        slots:
          id: path.id
      - text: Remove watchlist {id} entirely.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists/{id}'].patch
  update:
    x-apievangelist-phrasing:
      intent: Edit selected fields of a list
      effect: write
      questions:
      - Can I just recolor a list without touching its name?
      - How do I rename a list while keeping its other settings?
      instructions:
      - text: Change only the color of list {id} to {color}.
        slots:
          id: path.id
          color: requestBody.color
      - text: Rename list {id} to {name} and keep everything else.
        slots:
          id: path.id
          name: requestBody.name
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists/{id}/items'].post
  update:
    x-apievangelist-phrasing:
      intent: Add a company or person to a list
      effect: write
      questions:
      - How do I add a company to one of my watchlists?
      - Can I attach a note when adding an item to a list?
      instructions:
      - text: Add {type} {slug} to list {id}.
        slots:
          type: requestBody.type
          slug: requestBody.slug
          id: path.id
      - text: Put company {slug} on list {id} with the note {note}.
        slots:
          slug: requestBody.slug
          id: path.id
          note: requestBody.note
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/lists/{id}/items/{item_id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Remove an item from a list
      effect: destructive
      questions:
      - How do I take a single company off a list without deleting the list?
      - Can I drop one entry from a watchlist?
      instructions:
      - text: Remove item {item_id} from list {id}.
        slots:
          item_id: path.item_id
          id: path.id
      - text: Drop entry {item_id} off watchlist {id}.
        slots:
          item_id: path.item_id
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/notes'].get
  update:
    x-apievangelist-phrasing:
      intent: List my recent notes
      effect: read
      questions:
      - What are the latest private notes I've written?
      - Can I limit how many recent notes come back?
      instructions:
      - text: Show my recent notes.
      - text: List my {limit} most recent notes.
        slots:
          limit: query.limit
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/notes'].post
  update:
    x-apievangelist-phrasing:
      intent: Write a private note on a company or person
      effect: write
      questions:
      - How do I jot down a private note about a company?
      - Can I pin a note I attach to a person?
      instructions:
      - text: Add a private note to {target_type} {target_id} saying {body}.
        slots:
          target_type: requestBody.target_type
          target_id: requestBody.target_id
          body: requestBody.body
      - text: 'Create a note titled {title} on {target_type} {target_id}: {body}.'
        slots:
          title: requestBody.title
          target_type: requestBody.target_type
          target_id: requestBody.target_id
          body: requestBody.body
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/notes/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one note
      effect: read
      questions:
      - Can I open a single note by its id?
      - How do I read the full text of one of my notes?
      instructions:
      - text: Get note {id}.
        slots:
          id: path.id
      - text: Show me the full body of note {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/notes/{id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Replace a note's title, body and pin
      effect: write
      questions:
      - How do I rewrite a note completely, title and body together?
      - Can I overwrite every editable field of a note at once?
      instructions:
      - text: Replace note {id} with title {title} and body {body}.
        slots:
          id: path.id
          title: requestBody.title
          body: requestBody.body
      - text: Overwrite all editable fields of note {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/notes/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a note
      effect: destructive
      questions:
      - How do I delete a private note?
      - Can I permanently remove a note I wrote on a company?
      instructions:
      - text: Delete note {id}.
        slots:
          id: path.id
      - text: Erase my note {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/notes/{id}'].patch
  update:
    x-apievangelist-phrasing:
      intent: Edit selected fields of a note
      effect: write
      questions:
      - Can I pin a note without resending its text?
      - How do I fix just the title of a note?
      instructions:
      - text: Set pinned to {pinned} on note {id} and leave the text alone.
        slots:
          pinned: requestBody.pinned
          id: path.id
      - text: Change only the title of note {id} to {title}.
        slots:
          id: path.id
          title: requestBody.title
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/notes/for/{type}/{id}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get my notes about a company or person
      effect: read
      questions:
      - What notes have I written about a particular company?
      - Can I pull every note attached to one person?
      instructions:
      - text: Show all my notes about {type} {id}.
        slots:
          type: path.type
          id: path.id
      - text: List notes attached to company {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/tags'].get
  update:
    x-apievangelist-phrasing:
      intent: List my tags with usage counts
      effect: read
      questions:
      - Which tags have I created and how many items use each?
      - Where can I see my tag counts?
      instructions:
      - text: List my tags with counts.
      - text: Show how many items carry each of my tags.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/tags'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a tag
      effect: write
      questions:
      - How do I make a new tag to label companies?
      - Is the number of tags I can create limited by plan?
      instructions:
      - text: Create a tag named {name}.
        slots:
          name: requestBody.name
      - text: Make a {color} tag called {name}.
        slots:
          color: requestBody.color
          name: requestBody.name
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/tags/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a tag and its assignments
      effect: destructive
      questions:
      - If I delete a tag, is it removed from everything it was applied to?
      - How do I delete one of my tags?
      instructions:
      - text: Delete tag {id}.
        slots:
          id: path.id
      - text: Remove tag {id} and all of its assignments.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/tags/{id}/assign'].post
  update:
    x-apievangelist-phrasing:
      intent: Apply a tag to a company or person
      effect: write
      questions:
      - How do I label a company with one of my tags?
      - Can I tag a person as well as a company?
      instructions:
      - text: Apply tag {id} to {target_type} {target_id}.
        slots:
          id: path.id
          target_type: requestBody.target_type
          target_id: requestBody.target_id
      - text: Tag company {target_id} with tag {id}.
        slots:
          target_id: requestBody.target_id
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/tags/{id}/unassign'].post
  update:
    x-apievangelist-phrasing:
      intent: Remove a tag from a company or person
      effect: write
      questions:
      - How do I take a tag off a company without deleting the tag?
      - Can I untag a single person?
      instructions:
      - text: Unassign tag {id} from {target_type} {target_id}.
        slots:
          id: path.id
          target_type: requestBody.target_type
          target_id: requestBody.target_id
      - text: Strip tag {id} off company {target_id}.
        slots:
          id: path.id
          target_id: requestBody.target_id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/exports'].get
  update:
    x-apievangelist-phrasing:
      intent: See my export history and monthly usage
      effect: read
      questions:
      - Which exports have I run recently?
      - Can I see past exports alongside how much of this month's quota I've used?
      instructions:
      - text: Show my export history.
      - text: List my last {limit} exports with this month's usage.
        slots:
          limit: query.limit
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/exports/usage'].get
  update:
    x-apievangelist-phrasing:
      intent: Check my monthly export quota
      effect: read
      questions:
      - How many exports do I have left this month?
      - What's my monthly export quota usage, without the history?
      instructions:
      - text: Check my monthly export quota usage.
      - text: Tell me how much of my export allowance remains.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/audit'].get
  update:
    x-apievangelist-phrasing:
      intent: View my account audit log
      effect: read
      questions:
      - Which plans include the account audit log, and how long is it kept?
      - Can I see who did what in my account?
      instructions:
      - text: Show my account audit log.
      - text: Get {limit} audit entries starting at offset {offset}.
        slots:
          limit: query.limit
          offset: query.offset
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/persons/lookup'].post
  update:
    x-apievangelist-phrasing:
      intent: Run a KYC lookup by DNI/NIE
      effect: read
      questions:
      - Can I run a KYC check on someone using their DNI or NIE?
      - Do I have to declare a legitimate purpose before a documentary person lookup?
      instructions:
      - text: Run a KYC lookup on DNI/NIE {dni_or_nie} for the purpose {finalidad}.
        slots:
          dni_or_nie: requestBody.dni_or_nie
          finalidad: requestBody.finalidad
      - text: 'Look up identity document {dni_or_nie}; stated purpose: {finalidad}.'
        slots:
          dni_or_nie: requestBody.dni_or_nie
          finalidad: requestBody.finalidad
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/persons/lookup/usage'].get
  update:
    x-apievangelist-phrasing:
      intent: Check my KYC lookup allowance
      effect: read
      questions:
      - How many KYC lookups does my plan allow and how many have I used?
      - Is my tier eligible for DNI lookups at all?
      instructions:
      - text: Check my KYC lookup allowance and usage.
      - text: Tell me how many DNI lookups I have left.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/persons/lookup/history'].get
  update:
    x-apievangelist-phrasing:
      intent: See my past KYC lookups
      effect: read
      questions:
      - Which KYC lookups have I run before?
      - Are identifiers masked in my lookup history?
      instructions:
      - text: Show my redacted KYC lookup history.
      - text: List {limit} past KYC lookups from offset {offset}.
        slots:
          limit: query.limit
          offset: query.offset
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/api-credentials'].get
  update:
    x-apievangelist-phrasing:
      intent: List my API credentials
      effect: read
      questions:
      - Which API keys exist on my account and what scopes do they have?
      - Can I see an API key's prefix and last four characters without the secret?
      instructions:
      - text: List my API credentials.
      - text: Page through my API keys, {limit} at a time from cursor {cursor}.
        slots:
          limit: query.limit
          cursor: query.cursor
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/api-credentials'].post
  update:
    x-apievangelist-phrasing:
      intent: Create an API credential
      effect: write
      questions:
      - How do I generate a new API key?
      - What is the longest expiry I can set on a new API credential?
      instructions:
      - text: Create an API credential named {name} with scopes {scopes}.
        slots:
          name: requestBody.name
          scopes: requestBody.scopes
      - text: Issue a new API key scoped to {scopes} expiring {expires_at}.
        slots:
          scopes: requestBody.scopes
          expires_at: requestBody.expires_at
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/api-credentials/{id}/rotate'].post
  update:
    x-apievangelist-phrasing:
      intent: Rotate an API credential
      effect: destructive
      questions:
      - How do I swap a compromised API key for a new token?
      - Does rotating an API key revoke the old one?
      instructions:
      - text: Rotate API credential {id}.
        slots:
          id: path.id
      - text: Rotate key {id} and give the replacement the scopes {scopes}.
        slots:
          id: path.id
          scopes: requestBody.scopes
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/api-credentials/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Revoke an API credential
      effect: destructive
      questions:
      - How do I permanently disable an API key?
      - Can I revoke a key without getting a replacement token?
      instructions:
      - text: Revoke API credential {id}.
        slots:
          id: path.id
      - text: Disable API key {id} for good.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/webhooks'].get
  update:
    x-apievangelist-phrasing:
      intent: List my outbound webhooks
      effect: read
      questions:
      - Which webhooks have I registered and which event types are allowed?
      - Is the webhook delivery worker healthy?
      instructions:
      - text: List my outbound webhooks.
      - text: Show the webhook event allowlist and worker health.
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/webhooks'].post
  update:
    x-apievangelist-phrasing:
      intent: Register an outbound webhook
      effect: write
      questions:
      - How do I get notified at my own HTTPS endpoint when registry events happen?
      - Can a webhook subscribe to wildcard events?
      instructions:
      - text: Create a webhook to {url} for events {events}.
        slots:
          url: requestBody.url
          events: requestBody.events
      - text: Send {events} notifications to my endpoint {url}.
        slots:
          events: requestBody.events
          url: requestBody.url
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/webhooks/{id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete an outbound webhook
      effect: destructive
      questions:
      - How do I stop and remove a webhook for good?
      - Can I delete a webhook I no longer need?
      instructions:
      - text: Delete webhook {id}.
        slots:
          id: path.id
      - text: Remove outbound webhook {id} permanently.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/webhooks/{id}'].patch
  update:
    x-apievangelist-phrasing:
      intent: Update a webhook's URL, events or status
      effect: write
      questions:
      - How do I point an existing webhook at a new URL?
      - Can I pause a webhook without deleting it?
      instructions:
      - text: Change webhook {id} to deliver to {url}.
        slots:
          id: path.id
          url: requestBody.url
      - text: Set webhook {id} active to {active}.
        slots:
          id: path.id
          active: requestBody.active
      - text: Subscribe webhook {id} to events {events}.
        slots:
          id: path.id
          events: requestBody.events
      method: generated
      generated: '2026-09-26'
- target: $.paths['/api/v1/user/webhooks/{id}/rotate'].post
  update:
    x-apievangelist-phrasing:
      intent: Rotate a webhook's signing secret
      effect: destructive
      questions:
      - How do I get a new signing secret for a webhook?
      - What happens to pending deliveries signed with the old webhook secret?
      instructions:
      - text: Rotate the signing secret for webhook {id}.
        slots:
          id: path.id
      - text: Issue a fresh signature key on webhook {id}.
        slots:
          id: path.id
      method: generated
      generated: '2026-09-26'


# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openmercantil/refs/heads/main/overlays/openmercantil-user-api-phrasing-overlay.yaml