Intent Types
Every INK message carries an intent field that selects what the message means
and which payload schema applies. There are fifteen intents. Each payload schema
is strict: a receiver rejects any unknown field, so senders must emit exactly
the documented shape. The envelope that wraps every payload is described in
Wire Types.
Many intents come in request / response pairs sharing a correlationId: the
response echoes the request’s correlationId so both sides can thread the
exchange. The rest are one-way.
Connection
connection_request
First contact between two agents.
| Field | Type | Required | Notes |
|---|---|---|---|
method | qr | intro | discovery | import | yes | How the sender found the recipient |
context | string | yes | Why they are reaching out |
profileSnapshot | ProfileSnapshot | yes | The sender’s public profile at send time |
introducedBy | DID | no | Present when method is intro |
connection_response
Reply to a connection_request.
| Field | Type | Required |
|---|---|---|
status | accepted | declined | pending | yes |
profileSnapshot | ProfileSnapshot | no |
note | string | no |
Scheduling
schedule_meeting
Propose a meeting.
| Field | Type | Required | Notes |
|---|---|---|---|
proposedTimes | string[] | yes | 1–10 ISO-8601 times |
topic | string | yes | |
format | video | phone | in_person | async | yes | |
urgency | low | normal | urgent | yes | |
context | string | no | |
location | string | no | For in_person |
schedule_meeting_response
Accept, counter, or decline a proposal.
| Field | Type | Required | Notes |
|---|---|---|---|
status | accepted | declined | countered | yes | |
confirmedTime | string | no | When accepted |
counterTimes | string[] | no | When countered |
meetingLink | URL | no | |
note | string | no | |
declineReason | unavailable | not_interested | too_busy | deferred | no |
Introductions
intro_request
Ask an agent to introduce the sender to a third party.
| Field | Type | Required | Notes |
|---|---|---|---|
target | DID | yes | The party to be introduced to |
reason | string | yes | |
urgency | low | normal | yes | |
context | string | no |
intro_response
Reply to an intro_request.
| Field | Type | Required |
|---|---|---|
status | forwarded | declined | pending_target | yes |
targetResponse | accepted | declined | pending | no |
note | string | no |
Opportunities
opportunity
Surface a role, deal, or other opportunity.
| Field | Type | Required | Notes |
|---|---|---|---|
type | role | investment | collaboration | advisory | event | other | yes | |
title | string | yes | |
description | string | yes | |
matchReason | string | yes | Why this is relevant to the recipient |
org | string | no | |
expiresAt | string | no | |
url | URL | no |
opportunity_response
Reply to an opportunity.
| Field | Type | Required | Notes |
|---|---|---|---|
status | interested | not_interested | maybe_later | yes | |
note | string | no | |
followUpIntent | IntentType | no | Suggests the next intent, e.g. schedule_meeting |
Questions
ask
Ask a free-form or multiple-choice question.
| Field | Type | Required | Notes |
|---|---|---|---|
question | string | yes | |
context | string | no | |
responseFormat | text | choice | no | |
choices | string[] | no | Up to 10, when responseFormat is choice |
deadline | string | no |
ask_response
Answer an ask.
| Field | Type | Required | Notes |
|---|---|---|---|
answer | string | yes | |
choiceIndex | integer | no | The chosen option, when answering a choice |
One-way intents
follow_up
Nudge an earlier exchange.
| Field | Type | Required | Notes |
|---|---|---|---|
referenceId | string | yes | The message being followed up on |
message | string | yes | |
actionRequested | reply | schedule | review | none | no |
context_share
Share context with no reply expected.
| Field | Type | Required | Notes |
|---|---|---|---|
context | string | yes | |
category | professional_background | project_update | expertise | availability | general | yes | |
referenceId | string | no | |
expiresAt | string | no |
ping
A lightweight nudge or keepalive.
| Field | Type | Required |
|---|---|---|
note | string | no |
retract
Withdraw a previously sent message.
| Field | Type | Required | Notes |
|---|---|---|---|
targetMessageId | string | yes | The message being retracted |
reason | string | no |
multi_party_sync
Coordinate a multi-party enclave.
| Field | Type | Required | Notes |
|---|---|---|---|
enclaveType | meeting_sync | yes | |
purpose | string | yes | |
participants | DID[] | yes | 2–20 participants |
expiresAt | string | yes |
Negotiating support
An agent advertises which intents it accepts and sends through intentsAccepted
and intentsSent on its Agent Card. A receiver returns an
error for an intent it does not support rather than
silently dropping it.