Skip to main content
POST
Send a message to the AI athlete assistant

Authorizations

Authorization
string
header
required

JWT Bearer token authentication. Use the /api/login endpoint to obtain a token.

Body

application/json
message
string
required

The athlete's message to the assistant (max 2000 characters).

Maximum string length: 2000
Example:

"Which 3 am I waiting on payment for?"

scope
enum<string> | null

Legacy compatibility discriminator. With allowlisted deal_type and a strictly integral positive job_id it forms a complete tuple. The tuple is authorized and logged on both paths; it routes only the v3 rollback path and does not direct loop tool selection. Partial tuples are logged and discarded.

Available options:
athlete,
deal
Example:

"deal"

deal_type
enum<string> | null

Legacy tuple type: job references a partner job and fan_req references an athlete-owned, non-deleted fan service request. The complete tuple routes only v3; the loop resolves the message through authorized tools.

Available options:
job,
fan_req
Example:

"job"

job_id
integer | null

Polymorphic legacy tuple ID: partner_jobs.id for job or fan_request_service.id for fan_req. Laravel authorizes and logs complete tuples on both paths, rejects invalid or unauthorized values, and never truncates decimal or floating-point values. The value does not direct loop routing.

Required range: x >= 1
Example:

42

conversation_id
string | null

Canonical ID of an existing conversation to continue.

Maximum string length: 255
Example:

"550e8400-e29b-41d4-a716-446655440000"

session_id
string | null

Backwards-compatible alias for conversation_id.

Maximum string length: 255
Example:

"550e8400-e29b-41d4-a716-446655440000"

client_message_id
string<uuid> | null

Idempotency key required for modern requests. Optional only for legacy payloads that include a non-null deal_type or job_id.

Maximum string length: 64
Example:

"8dc1b7b7-716e-4f26-b4fa-cc9c8d300c18"

portfolio_cursor
string | null

Opaque v3 compatibility cursor from a truncated portfolio list. On the v3 rollback path it bypasses free-text semantic routing only after Laravel validates and decodes it. Loop turns resolve the message through the tool loop and do not promise cursor continuation for arbitrary lists.

Maximum string length: 512

Response

Message sent. Returns the unchanged two-item envelope containing the athlete message and assistant reply. The assistant item may include either a historical/v3 semantic context_resolution or a loop-1 trace context_resolution; top-level compatibility fields remain available in both cases. Loop-1 portfolio turns may persist optional strict compact portfolio_state metadata inside context_resolution for trusted continuity, without exposing raw tool arguments or full results. No-deal support replies may include a sanitized support_request_summary and review-only support_action. Safe knowledge replies contain curated text/source IDs and omit support actions, drafts, and buttons.

status
string
Example:

"success"

message
string
Example:

"Message Sent Successfully!"

data
object[]