{"openapi":"3.1.1","info":{"title":"Bithart project introductions","version":"1.0.0","description":"Public discovery and an authenticated, permission-based project brief API. This is a Bithart HTTPS/JSON interface, not an implementation of the A2A JSON-RPC protocol or MCP. Check capabilities for current availability.","contact":{"email":"contact@bithart.com","url":"https://www.bithart.com/agents"}},"servers":[{"url":"https://www.bithart.com"}],"paths":{"/api/agent/capabilities":{"get":{"operationId":"getBithartCapabilities","summary":"Discover services, boundaries and current intake availability","security":[],"responses":{"200":{"description":"Public capabilities; no personal data or credentials."}}}},"/api/agent/briefs":{"post":{"operationId":"submitProjectIntroduction","summary":"Submit a person-approved brief for Bithart's review","description":"Approved server-to-server clients only. Obtain specific permission before sending. No browser Origin header, arbitrary recipients, attachments or callback URLs. Maximum body: 16,000 UTF-8 bytes. Best-effort per-instance limit: five attempts per client per 15 minutes. Honour Retry-After. Reuse the identical body and key after an uncertain result; never retry blindly after 24 hours. Do not submit marketing lists or operate other systems.","security":[{"agentBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Random identifier for one brief; no personal information. Reuse unchanged for retries within 24 hours. Generate a new key only for a different brief. Deduplication is performed by the delivery provider.","schema":{"type":"string","pattern":"^[a-zA-Z0-9_-]{16,100}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["brief","consent"],"properties":{"brief":{"type":"object","additionalProperties":false,"required":["email","company","problem"],"description":"Plain text only. String fields are trimmed before validation. Do not include secrets or confidential records.","properties":{"name":{"type":"string","minLength":0,"maxLength":100,"pattern":"^$|^[\\s\\S]{2,100}$"},"email":{"type":"string","minLength":3,"maxLength":254,"format":"email","pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"company":{"type":"string","minLength":2,"maxLength":150},"problem":{"type":"string","minLength":20,"maxLength":3000},"project":{"type":"string","enum":["","AI Architecture Sprint","Custom AI Software & Products","AI Agents & Workflow Automation","Data, Knowledge & Integrations","Models & Applied AI","Cloud, Hosting & Private AI","AI Compute & GPU Infrastructure","Managed AI Operations","Not sure yet"]},"systems":{"type":"string","minLength":0,"maxLength":500},"considerations":{"type":"string","minLength":0,"maxLength":1000},"timing":{"type":"string","enum":["","Exploring","Within 1–3 months","Within 3–6 months","An existing system needs help"]}}},"consent":{"type":"object","additionalProperties":false,"required":["granted","purpose","confirmedAt"],"description":"Sender attestation: the person has reviewed the brief, recipient and privacy notice and explicitly authorised this specific introduction. This API does not independently verify human identity or consent.","properties":{"granted":{"const":true},"purpose":{"const":"project_enquiry"},"confirmedAt":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$","description":"Actual UTC permission time, within the last 30 days; at most five minutes clock skew ahead."}}}}}}}},"responses":{"202":{"description":"Delivery service acceptance ONLY, not confirmed inbox delivery, human review, a booking or an engagement.","content":{"application/json":{"schema":{"type":"object","required":["receipt"],"properties":{"receipt":{"type":"object","required":["status","reference","message"],"properties":{"status":{"const":"accepted"},"reference":{"type":"string","pattern":"^BH-[A-F0-9]{20}$"},"message":{"type":"string"}}}}}}}},"400":{"description":"Invalid brief, consent or request key; nothing submitted.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"401":{"description":"Missing, invalid, revoked or expired credential.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"403":{"description":"Browser-origin submissions are not supported.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"408":{"description":"Request body timeout.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"409":{"description":"Request key conflict or concurrent request. Retry the identical request after waiting; a changed brief needs a new key.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"413":{"description":"Body exceeds 16,000 bytes.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"415":{"description":"Use uncompressed application/json.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"429":{"description":"Too many attempts. Honour Retry-After (seconds).","headers":{"Retry-After":{"schema":{"type":"integer","example":900}}},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"502":{"description":"Delivery unconfirmed. The provider may have accepted it; retry the identical body and key.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"503":{"description":"Intake or delivery not enabled; use the human contact route.","headers":{},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"error":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}}},"components":{"securitySchemes":{"agentBearer":{"type":"http","scheme":"bearer","description":"Individually provisioned, expiring agent credential. Obtain through contact@bithart.com; keep in your server's secret store, never a URL, prompt or browser bundle."}}}}