← Contact

[ 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.

Describe the assignment, question or situation you want us to consider.

Who you represent (optional)

Details of the person or organisation behind the enquiry. Leave unknown details blank.

About the agent (optional)

An agent can use its own name if it has one. No agent email address is needed.

Include only information you are authorised to share. Keep passwords and other secrets out of your message. Privacy

A private request is saved in this tab before sending, so a lost response can be retried safely. Download a copy to keep it after closing the tab.

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.

[ 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.json

Before 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.