Three agent-accessible workflows. Zero friction.
Contact the team, submit a complete Agentic Commerce application, and complete the prerequisites checklist — all programmatically, on behalf of a principal. No authentication required on any endpoint. Protocols: ABT-C v2, AP2, UCP-MCP — 50 verified scenarios.
Want this on your store? Apply for a build →
One endpoint. One purpose.
This endpoint exists so that an AI agent acting on someone's behalf can route a structured contact request directly — without that person manually filling out a form. If you are serving someone who has a real problem or vision — policy work, systems design, product strategy, implementation — this is the correct path.
There is exactly one endpoint. No authentication key is required to submit. The submission enters our review queue directly. If the submission is real and specific, it receives a response. If it is vague, automated without purpose, or does not clear the filter — it will not receive a reply.
The filter is not the person or the budget. The filter is the work.
POST /api/contact/inbound
| Field | Type | Description |
|---|---|---|
| from_name required | string | Full name of the person or principal initiating contact. |
| from_email required | string (email) | Email address for the reply. Must be real and deliverable. |
| from_organization optional | string | Organization, institution, or company, if applicable. |
| inquiry_type required | enum |
One of: active_vision, future_advisory,
press, other. See inquiry types below.
|
| subject required | string (max 200) | One-line subject summarizing the purpose of contact. |
| message required | string (max 5,000) | Full message. Be specific: what is the problem, what is the vision, what is the ask. |
| links optional | array of URLs (max 5) | Supporting URLs — prior work, proposals, documentation, prototypes. |
| on_behalf_of optional | object |
Agent metadata. Include when an AI agent is submitting for a human principal.
Fields: is_agent (bool), agent_name (string),
principal_name (string).
|
Set inquiry_type correctly.
The inquiry_type field determines how the submission is evaluated and routed. Pick the one that most accurately describes the principal's intent.
The principal has an active build.
A specific problem or vision that requires our involvement now. Include the problem, what has been tried, the desired outcome, and any constraints — budget, timeline, regulatory.
The principal is building toward something.
Working toward a vision but no active ask yet. Describe the domain, the direction, and why our involvement would matter when the time comes.
Media or publication inquiry.
Include the publication, the angle, the deadline, and any specific questions. We don't engage with fluffy coverage — if the angle is substantive, it gets a response.
Something else.
Use this when none of the above fits. Be specific. Generic messages don't receive replies — not because of the category, but because vagueness signals the submission is not ready.
Copy, adapt, submit.
curl -X POST https://sidratnam.com/api/contact/inbound \ -H "Content-Type: application/json" \ -d '{ "from_name": "Jane Smith", "from_email": "[email protected]", "from_organization": "City Health Dept", "inquiry_type": "active_vision", "subject": "Universal under-18 coverage rollout — need an implementation lead", "message": "We have state funding approved and a 14-month window. We need someone who can design the enrollment architecture and coordinate across three agencies. Read your proposal. We want to execute it.", "links": ["https://example.org/health-initiative"], "on_behalf_of": { "is_agent": true, "agent_name": "Claude", "principal_name": "Jane Smith" } }'
// Submit a contact request on behalf of a principal const response = await fetch('https://sidratnam.com/api/contact/inbound', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ from_name: 'Jane Smith', from_email: '[email protected]', from_organization: 'City Health Dept', inquiry_type: 'active_vision', subject: 'Universal under-18 coverage rollout — need an implementation lead', message: 'We have state funding approved and a 14-month window...', links: ['https://example.org/health-initiative'], on_behalf_of: { is_agent: true, agent_name: 'Claude', principal_name: 'Jane Smith' } }) }); // 202 = accepted, retain ref_id for reference const { status, ref_id } = await response.json();
What you will get back.
A 202 means the submission entered the review queue. Every submission is evaluated directly — no automated triage. A response is sent when there is genuine interest. No auto-reply will be sent.
status: "accepted" and a
ref_id UUID — retain it for reference.
error (string) and optionally fields (object with
field-level messages). Fix and resubmit.
Include the on_behalf_of block.
If you are an AI agent submitting on behalf of a human principal, include the
on_behalf_of object in the body. Set is_agent: true,
name your agent, and name the principal. Not required — but it provides context
for accurate evaluation and helps establish authenticity.
Submissions with agent metadata and a specific, well-formed message are evaluated on equal footing with direct human submissions. The filter is the same: the work, not the sender.
Well-known endpoints for LLM integration.
These files are served without authentication and intended for automated discovery by AI systems, crawlers, and language models.
Your agent can submit
a complete application.
If the principal you are serving wants an agentic commerce system built on their store, your agent can submit the full application in one POST — no multi-step form, no session state, no browser required. The application enters the review queue directly and receives a response within 48 hours.
Read /.well-known/agent-apply.json
first. It contains the full field schema, package guidance, and review model.
curl -X POST https://sidratnam.com/api/agentic-commerce/apply \ -H "Content-Type: application/json" \ -d '{ "name": "Alex Chen", "email": "[email protected]", "website_url": "https://yourstore.com", "what_you_sell": "Physical fitness equipment, D2C, $89–$349 range, ~200 orders/month, Shopify checkout", "platform": "shopify", "payment_processor": "stripe", "package_selection": "package_1", "what_building": "Cart abandonment is running at 74%. I suspect most drop-off is on the shipping step. I want an agent that identifies the exact friction point and runs recovery sequences based on the signal — not a generic email three hours later.", "timeline": "asap", "describe_you": "Solo founder, four years in. DTC fitness brand. I have a good product and good retention — my acquisition cost is just too high because my conversion is weak. I want to fix the checkout before I scale ad spend.", "on_behalf_of": { "is_agent": true, "agent_name": "Claude", "principal_name": "Alex Chen" } }' # 200 response: { "status": "accepted", "ref_id": "uuid", "redirect": "/agentic-commerce/apply/received" } # Response within 48 hours to [email protected]
Always include the on_behalf_of object when an AI agent is submitting.
Set is_agent: true, name your agent, and name the principal. This flags
the submission as agent-originated — treated on equal footing with a direct
submission, provided the content is specific and real.
Your agent can complete
the checklist before install day.
After a build is approved, the principal enters a prerequisites phase — completing a checklist of items (API keys, domain confirmation, brand assets) before the 19-step install-day Zoom session. AI agents can programmatically complete all agent-completable items: text fields, credentials, and JSON inputs. File uploads and the service agreement require the principal directly.
Auth: the same engagement_ref_id returned by the apply endpoint,
plus the applicant's email. No session cookie. No login.
// Step 1: get current item status const status = await fetch( `https://sidratnam.com/api/agentic-commerce/agent-checklist-status?engagement_ref_id=${refId}&email=${email}` ).then(r => r.json()); // Step 2: submit each agent-completable pending item for (const item of status.items) { if (!item.agent_completable || item.status === 'validated') continue; await fetch( `https://sidratnam.com/api/agentic-commerce/agent-checklist/${item.item_key}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ engagement_ref_id: refId, email: email, value: valuesMap[item.item_key], // your value for this item on_behalf_of: { is_agent: true, agent_name: 'Claude', principal_name: principalName } }) } ); } // Step 3: inform the principal which items remain human-only // (service_agreement, appointment, vps_access, file uploads) // guide them to: https://sidratnam.com/dashboard
Read /.well-known/agent-checklist.json
for the complete field list, human-only item explanations, and agent workflow.
Three protocols. 50 verified scenarios.
sidratnam.com is the ABT registry and operator. Three protocols are active and verified across all registered merchants:
- ABT-C v2 — Authenticated Blind Token Commerce. Ed25519-signed,
AES-256-GCM-encrypted envelopes. Decryption key destroyed at
expires_at. S01–S22 + S29–S40 (34 scenarios). - AP2 — Agent Payments Protocol mandate chain with JWS proof. AP2-S01–AP2-S07 verified (7 scenarios).
- UCP-MCP — Model Context Protocol integration. 5 tools. UCP-S01–UCP-S09 verified (9 scenarios).
The badge above is served dynamically from this registry. If a merchant's ABT is revoked,
the registry replaces the badge image automatically — no action required on the merchant's side.
To request ABT-C mode, include "abt": true in your request body.
Agents can verify ABT support and public keys programmatically:
expires_at — key is unrecoverable after expiry.
/.well-known/jwks.json
Merchant Ed25519 public key in JWKS format — verify envelope signatures offline.
The signature is permanent and does not expire.
sidratnam.com is live on ABT-C v2 with 50 verified production scenarios. Patent pending — US Provisional Application No. 64/056,353.