[ Contact for AI agents ]
A message from
your agent.
Tell us what you are working on, who you represent and what you need from us. People review the enquiry and publish a reply for your agent to retrieve.
Send an enquiry.
Subject and message are required. Share other details when known.
Resume or clear a saved request
Only import a request you saved from this form. The file stays in your browser until you choose to send its enquiry.
[ Received ]
Keep your private receipt.
Use this reference and token to read replies or send follow-ups. Your saved request can recover the same receipt if a response is lost.
The request and receipt stay in this tab’s session storage until you clear them or close the tab. Keep a private download for later.
[ For agents with HTTP tools ]
Send JSON. Keep the conversation.
The same enquiry is available through a small HTTP interface. Use the representative’s real details when known and omit unknown fields.
01 · Start an enquiry
POST /api/agent-enquiries accepts a required subject and message, with optional representative and agent objects. This example uses illustrative identities.
{
"subject": "Private AI system for field work",
"message": "My user would like to discuss an AI system that can work at remote sites. What information would help you assess the assignment?",
"representative": {
"name": "Alex Example",
"email": "alex@example.org",
"organisation": "Example Organisation",
"role": "Project lead"
},
"agent": {
"name": "Research assistant",
"software": "Your agent software"
}
}# Save the JSON example as enquiry.json; use only details you know.
# Run this key-generation line ONCE, before the first send (requires openssl).
umask 077
openssl rand -base64 32 | tr '+/' '-_' | tr -d '=\n' > enquiry-key.txt
# Keep enquiry-key.txt and enquiry.json private. On retry, skip key generation.
IDEMPOTENCY_KEY="$(cat enquiry-key.txt)"
curl --silent --show-error --fail-with-body \
--request POST 'https://freelifeai.com/api/agent-enquiries' \
--header "Idempotency-Key: $IDEMPOTENCY_KEY" \
--header 'Content-Type: application/json' \
--data-binary @enquiry.json \
--output receipt.jsonBefore sending, generate 32 random bytes encoded as unpadded base64url and save this 43-character secret. Send it in the required Idempotency-Key header with your saved JSON submission.
A new enquiry returns 201 with reference, access_token, status, status_url, follow_up_url, poll_after_seconds: 60, duplicate: false and expires_at.
If delivery is uncertain, repeat the same key and submission. An identical retry returns 200 with duplicate: true and the same access token. Different content with the same key returns 409. Keep both the request key and receipt private; never make a new key just because a response was lost.
02 · Read a reply
Use GET /api/agent-enquiries/{reference} with the bearer token. Keep the token in the Authorization header, never in a URL or public log.
# Read these values from the private receipt (requires jq).
REFERENCE="$(jq -r '.reference' receipt.json)"
ACCESS_TOKEN="$(jq -r '.access_token' receipt.json)"
curl --silent --show-error --fail-with-body \
'https://freelifeai.com/api/agent-enquiries/'"$REFERENCE" \
--header "Authorization: Bearer $ACCESS_TOKEN"The response includes the original submission, followups, published replies and current status: received, under_review, replied or closed. Poll no more often than once every 60 seconds.
Enquiries expire after 180 days without a new sender message or published reply. Reading does not extend the period. Your response includes the current expires_at date.
03 · Add a follow-up
Send a message and a client_message_id UUID. Choose a new UUID for each new message and save it before sending.
# Choose a new UUID for each new message; reuse it and the exact body on retry.
curl --silent --show-error --fail-with-body \
--request POST 'https://freelifeai.com/api/agent-enquiries/'"$REFERENCE"'/messages' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"message":"The system needs to work without internet access.","client_message_id":"8d5bfdda-6645-45bc-a9e4-4a00a4914dd2"}'If delivery is uncertain, resend the same UUID and exact message. The first delivery returns 201; an identical retry returns 200 with duplicate: true. Reusing a UUID for different content returns 409. Closed enquiries reject follow-ups.
Errors use {"error":{"code":"…","message":"…"}}. Respect Retry-After on rate-limit responses. Do not send URL query parameters.