Skip to main content
npayload is launching soon.
npayloadDocs
ASP ProtocolConcepts

Performatives

The 13 message types that define communicative intent in ASP sessions

Every ASP message carries a performative: a declaration of what the sender intends to accomplish by sending it. A PROPOSE is not just data. It is an act of proposing. An ACCEPT is not a status update. It is the act of agreeing. This distinction, rooted in speech act theory (Austin, 1962; Searle, 1969), is what separates structured negotiation from unstructured message passing.

ASP defines 13 performatives across four categories. Each has defined semantics, a body schema, and a set of allowed transitions that determine which performatives may follow it in a session.

Negotiation

The core back-and-forth of agent interaction. These four performatives handle proposals, agreements, rejections, and counter-offers.

PROPOSE

Suggest terms, actions, or session invitations. This is the primary initiating performative in most sessions. A PROPOSE creates a proposal that the recipient can accept, reject, counter, or request clarification on.

{
  "performative": "PROPOSE",
  "content": {
    "mimeType": "application/json",
    "body": {
      "proposalId": "prop_019478a3",
      "type": "service-agreement",
      "subject": "Data processing pipeline setup",
      "terms": {
        "throughput": "10000 events/sec",
        "latency": "< 200ms p99",
        "price": { "amount": 0.001, "currency": "USD", "per": "event" }
      },
      "validUntil": "2026-03-08T00:00:00.000Z"
    }
  }
}

Understanding the PROPOSE body

FieldTypeRequiredDescription
proposalIdstringYesUnique identifier for this proposal, used by ACCEPT, REJECT, and COUNTER to reference it
typestringYesProposal category: service-agreement, data-exchange, session-invitation, resource-allocation
subjectstringYesHuman-readable summary of what is being proposed
termsobjectYesThe proposed terms. Structure varies by proposal type.
validUntilISO 8601NoExpiration timestamp. After this time, the proposal is void and cannot be accepted.

Allowed responses: ACCEPT, REJECT, COUNTER, CLARIFY


ACCEPT

Agree to a proposal as stated. An ACCEPT is a binding response that creates obligations for both parties based on the accepted terms. The referenceId links back to the proposal being accepted.

{
  "performative": "ACCEPT",
  "content": {
    "mimeType": "application/json",
    "body": {
      "referenceId": "prop_019478a3",
      "acknowledgment": "Terms accepted. Ready to begin data pipeline provisioning."
    }
  }
}

Understanding the ACCEPT body

FieldTypeRequiredDescription
referenceIdstringYesThe proposalId of the proposal being accepted
acknowledgmentstringNoOptional confirmation message for the counterparty

May be followed by: INFORM, COMMIT, DELEGATE, CLOSE


REJECT

Decline a proposal with a reason and a machine-readable code. A REJECT is terminal for that specific proposal but does not end the session. The sender may issue a new PROPOSE with different terms.

{
  "performative": "REJECT",
  "content": {
    "mimeType": "application/json",
    "body": {
      "referenceId": "prop_019478a3",
      "reason": "Latency requirement cannot be met in the requested region",
      "code": "capacity_unavailable",
      "retryable": true
    }
  }
}

Understanding the REJECT body

FieldTypeRequiredDescription
referenceIdstringYesThe proposalId of the proposal being rejected
reasonstringYesHuman-readable explanation of why the proposal was rejected
codestringYesMachine-readable rejection code from the table below
retryablebooleanNoWhether a modified proposal on the same topic has a reasonable chance of acceptance. Defaults to false.

Rejection codes

CodeMeaning
insufficient_trust_scoreSender's trust score is below the required threshold
unauthorizedSender lacks permission for the requested action
schema_unsupportedThe proposal uses a schema the recipient cannot process
budget_exceededThe proposed cost exceeds the recipient's budget
capacity_unavailableThe recipient cannot meet the capacity requirements
policy_violationThe proposal violates the recipient's policies
timeoutThe proposal expired before it could be evaluated
duplicateAn equivalent proposal is already active
escalation_requiredThe proposal requires human approval before the agent can respond
unspecifiedNo specific reason provided. Use sparingly.

May be followed by: PROPOSE, INFORM, CLOSE


COUNTER

Reject and simultaneously propose alternative terms. A COUNTER combines the semantics of REJECT and PROPOSE in a single atomic message, avoiding the ambiguity of sending them separately.

{
  "performative": "COUNTER",
  "content": {
    "mimeType": "application/json",
    "body": {
      "referenceId": "prop_019478a3",
      "originalTerms": {
        "throughput": "10000 events/sec",
        "latency": "< 200ms p99",
        "price": { "amount": 0.001, "currency": "USD", "per": "event" }
      },
      "counterTerms": {
        "throughput": "10000 events/sec",
        "latency": "< 500ms p99",
        "price": { "amount": 0.0008, "currency": "USD", "per": "event" }
      },
      "rationale": "Can meet throughput but need higher latency tolerance. Offering reduced price to compensate."
    }
  }
}

Understanding the COUNTER body

FieldTypeRequiredDescription
referenceIdstringYesThe proposalId of the proposal being countered
originalTermsobjectNoEcho of the original terms for clarity. Useful in multi-round negotiations.
counterTermsobjectYesThe alternative terms being proposed
rationalestringNoExplanation of why the original terms were rejected and how the counter addresses the gap

Counters can include a "final": true field to signal last-offer semantics. When final is true, the sender indicates this is their best offer and further countering is not productive. The recipient should ACCEPT or REJECT rather than COUNTER again.

Allowed responses: ACCEPT, REJECT, COUNTER, CLARIFY


Information

Performatives for sharing data, requesting data, and resolving ambiguity.

INFORM

Share information without requesting a response. INFORM is the most flexible performative and can carry status updates, progress reports, identity assertions, factual statements, computation results, or error notifications.

{
  "performative": "INFORM",
  "content": {
    "mimeType": "application/json",
    "body": {
      "topic": "execution-progress",
      "data": {
        "stage": "data-ingestion",
        "percentComplete": 73,
        "estimatedCompletion": "2026-03-07T15:45:00.000Z"
      },
      "format": "progress-report"
    }
  }
}

Understanding the INFORM body

FieldTypeRequiredDescription
topicstringYesWhat the information is about: status, progress, identity, fact, result, error
dataobjectYesThe information payload. Structure varies by topic.
formatstringNoHint for how the recipient should interpret the data

Any performative may follow an INFORM. It places no constraints on the conversation flow.


QUERY

Request specific information from another agent. A QUERY expects an INFORM response containing the requested data. Queries can include a responseFormat that tells the recipient the expected shape of the answer.

{
  "performative": "QUERY",
  "content": {
    "mimeType": "application/json",
    "body": {
      "question": "What throughput can you sustain for JSON event processing?",
      "responseFormat": {
        "type": "object",
        "properties": {
          "maxThroughput": { "type": "number" },
          "unit": { "type": "string" }
        }
      },
      "context": "Evaluating providers for high-volume event pipeline"
    }
  }
}

Understanding the QUERY body

FieldTypeRequiredDescription
questionstringYesThe information being requested, in natural language or structured form
responseFormatobjectNoJSON Schema describing the expected shape of the response
contextstringNoAdditional context to help the recipient provide a relevant answer

Expected response: INFORM


CLARIFY

Request clarification on an ambiguous message. CLARIFY does not accept or reject the referenced message. It pauses evaluation until the ambiguity is resolved.

{
  "performative": "CLARIFY",
  "content": {
    "mimeType": "application/json",
    "body": {
      "referenceId": "prop_019478a3",
      "questions": [
        {
          "field": "terms.latency",
          "question": "Does the latency requirement apply to median or p99?",
          "options": ["p50", "p95", "p99", "p999"]
        }
      ],
      "ambiguities": [
        "The 'latency' field specifies '< 200ms' without a percentile qualifier"
      ]
    }
  }
}

Understanding the CLARIFY body

FieldTypeRequiredDescription
referenceIdstringYesThe messageId or proposalId of the ambiguous message
questionsarrayYesStructured questions, each with a field path, question text, and optional options
ambiguitiesarrayNoPlain-text descriptions of what is unclear

Expected response: INFORM (with the clarifying information)


Action

Performatives that create binding obligations, transfer responsibility, or request human intervention.

COMMIT

Create a binding obligation. COMMIT is the strongest performative in ASP. It transforms a negotiated agreement into a formal obligation with deadlines, verification methods, penalties, and optional escrow.

{
  "performative": "COMMIT",
  "content": {
    "mimeType": "application/json",
    "body": {
      "commitmentId": "cmt_019478c1",
      "terms": {
        "referenceId": "prop_019478a3",
        "obligations": [
          {
            "party": "agent://acme.com/services/data-processor",
            "action": "Process events at 10,000/sec with < 500ms p99 latency",
            "deadline": "2026-04-07T00:00:00.000Z",
            "verificationMethod": "metric-query"
          }
        ],
        "penalties": {
          "lateFulfillment": "5% escrow forfeit per day",
          "nonDelivery": "full escrow forfeit"
        }
      },
      "deadline": "2026-04-07T00:00:00.000Z",
      "escrow": {
        "amount": 500,
        "currency": "USD",
        "releaseCondition": "obligation-met"
      }
    }
  }
}

Understanding the COMMIT body

FieldTypeRequiredDescription
commitmentIdstringYesUnique identifier for this commitment
termsobjectYesThe full terms including obligations, penalties, and reference to the accepted proposal
deadlineISO 8601YesOverall deadline for all obligations
penaltiesobjectNoConsequences for late or non-fulfillment
escrowobjectNoResources to hold until fulfillment is verified

A COMMIT cannot be withdrawn after the other party sends ACCEPT. Once both sides have agreed to a commitment, it is binding. Breach triggers the dispute resolution process.

May be followed by: ACCEPT, REJECT, INFORM, CLOSE


DELEGATE

Transfer responsibility for part of a session to another agent. The delegating agent remains accountable for the outcome even after delegation.

{
  "performative": "DELEGATE",
  "content": {
    "mimeType": "application/json",
    "body": {
      "delegateId": "agent://acme.com/specialists/compliance-checker",
      "task": "Verify regulatory compliance of proposed data handling terms",
      "authority": "advisory",
      "constraints": {
        "maxDuration": 300000,
        "protocol": "asp"
      }
    }
  }
}

Understanding the DELEGATE body

FieldTypeRequiredDescription
delegateIdstringYesThe agent:// URI of the agent receiving the delegation
taskstringYesDescription of what the delegate should do
authoritystringYesThe level of decision-making power granted
constraintsobjectNoLimits on the delegation (duration, protocol, scope)

Authority levels:

LevelMeaning
fullThe delegate can accept, reject, or counter on behalf of the delegating agent
limitedThe delegate can inform and query but cannot make binding decisions
advisoryThe delegate provides recommendations only, with no session authority

Protocol options: asp, a2a, mcp


ESCALATE

Escalate the session to a human operator or higher authority. When an agent reaches the limits of its autonomous capability, ESCALATE transfers the session context to a human for resolution. The session enters the ESCALATED state and pauses autonomous processing.

{
  "performative": "ESCALATE",
  "content": {
    "mimeType": "application/json",
    "body": {
      "reason": "authority-limit",
      "context": "Proposed commitment exceeds my authorized spending limit of $1000",
      "severity": "high",
      "suggestedResolution": "Request budget increase or reduce commitment scope to $800"
    }
  }
}

Understanding the ESCALATE body

FieldTypeRequiredDescription
reasonstringYesWhy escalation is needed (see table below)
contextstringYesDetailed explanation for the human operator
severitystringYesUrgency level: low, medium, high, critical
suggestedResolutionstringNoThe agent's recommendation for how to resolve the situation

Escalation reasons:

ReasonWhen to use
authority-limitThe decision exceeds the agent's authorized scope
confidence-lowThe agent is not confident enough to proceed autonomously
policy-ambiguousThe applicable policy is unclear or contradictory
adversarial-detectedThe agent suspects the counterparty is acting in bad faith

WITHDRAW

Leave a session or retract a previous proposal without penalty. WITHDRAW is only valid for messages that have not yet been accepted.

{
  "performative": "WITHDRAW",
  "content": {
    "mimeType": "application/json",
    "body": {
      "reason": "Updated pricing model available. Replacing with revised proposal."
    }
  }
}

Understanding the WITHDRAW body

FieldTypeRequiredDescription
reasonstringYesExplanation of why the agent is withdrawing

You cannot withdraw an accepted COMMIT. If a commitment has been accepted by both parties, it is binding. Use the dispute resolution process to handle disagreements about active commitments.


Lifecycle

Performatives for recording observations and ending sessions.

OBSERVE

Record facts, patterns, or learnings without expecting a response. OBSERVE is used heavily during the LEARN phase after a session closes, but it can appear at any point in a session.

{
  "performative": "OBSERVE",
  "content": {
    "mimeType": "application/json",
    "body": {
      "patterns": [
        "Counterparty consistently counters with 15-20% price reduction",
        "Response time increases when discussing compliance topics"
      ],
      "metrics": {
        "negotiationRounds": 4,
        "timeToAgreement": 127000
      },
      "notes": "Consider starting 10% above target price in future negotiations with this counterparty"
    }
  }
}

Understanding the OBSERVE body

FieldTypeRequiredDescription
patternsarrayNoBehavioral patterns identified during the session
metricsobjectNoQuantitative measurements from the session
notesstringNoFree-form observations for future reference

Visibility: OBSERVE messages are private by default. They are recorded for the sending agent's future reference and are not shared with the counterparty.


CLOSE

End the session. Both parties must send CLOSE for the session to enter the CLOSED state. If only one party sends CLOSE, the session enters a closing state and waits for the other party (10-second timeout).

{
  "performative": "CLOSE",
  "content": {
    "mimeType": "application/json",
    "body": {
      "rating": 4,
      "summary": "Service agreement established at $0.0008/event with 500ms p99 latency",
      "recommendations": [
        "Consider adding SLA monitoring as a commitment term",
        "Response times were excellent during negotiation"
      ]
    }
  }
}

Understanding the CLOSE body

FieldTypeRequiredDescription
ratingintegerYesPeer rating from 1 (poor) to 5 (excellent). Feeds into the Response Quality trust component.
summarystringNoHuman-readable summary of the session outcome
recommendationsarrayNoSuggestions for the counterparty or for future sessions

Transition matrix

The following table shows which performatives can follow each performative. This is a simplified view. The full transition matrix, including phase-dependent constraints, is defined in the specification.

After receivingValid responses
PROPOSEACCEPT, REJECT, COUNTER, CLARIFY
ACCEPTINFORM, COMMIT, DELEGATE, CLOSE
REJECTPROPOSE, INFORM, CLOSE
COUNTERACCEPT, REJECT, COUNTER, CLARIFY
INFORMAny performative
QUERYINFORM
CLARIFYINFORM
COMMITACCEPT, REJECT, INFORM, CLOSE
DELEGATEINFORM, ACCEPT, REJECT
ESCALATEINFORM, CLOSE
WITHDRAWINFORM, PROPOSE, CLOSE
OBSERVEAny performative
CLOSECLOSE

INFORM and OBSERVE are "open" performatives. They can appear at any point and do not constrain what follows. Most other performatives have restricted transition sets that enforce the negotiation flow.


Quick reference

PerformativeCategoryCreates obligation?Expects response?
PROPOSENegotiationNoYes
ACCEPTNegotiationYes (binds to proposal terms)No
REJECTNegotiationNoNo
COUNTERNegotiationNoYes
INFORMInformationNoNo
QUERYInformationNoYes
CLARIFYInformationNoYes
COMMITActionYes (binding obligation)Yes
DELEGATEActionNo (accountability stays with delegator)No
ESCALATEActionNoNo
WITHDRAWActionNo (removes prior obligation)No
OBSERVELifecycleNoNo
CLOSELifecycleNoYes (mutual close required)

Next steps

Was this page helpful?

On this page