web/docs/api/secret-system.openapi.yaml

264 lines
6.9 KiB
YAML

openapi: 3.0.3
info:
title: EDUT Secret System API
version: v1
description: Wallet-first designation and membership activation endpoints.
servers:
- url: https://api.edut.ai
paths:
/secret/wallet/intent:
post:
summary: Create wallet signature intent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WalletIntentRequest'
responses:
'200':
description: Intent created
content:
application/json:
schema:
$ref: '#/components/schemas/WalletIntentResponse'
/secret/wallet/verify:
post:
summary: Verify signed intent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WalletVerifyRequest'
responses:
'200':
description: Signature verified
content:
application/json:
schema:
$ref: '#/components/schemas/WalletVerifyResponse'
/secret/membership/quote:
post:
summary: Get current membership mint quote
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MembershipQuoteRequest'
responses:
'200':
description: Quote created
content:
application/json:
schema:
$ref: '#/components/schemas/MembershipQuoteResponse'
/secret/membership/confirm:
post:
summary: Confirm membership mint transaction
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MembershipConfirmRequest'
responses:
'200':
description: Membership active
content:
application/json:
schema:
$ref: '#/components/schemas/MembershipConfirmResponse'
/secret/membership/status:
get:
summary: Resolve membership status by wallet or designation code
parameters:
- in: query
name: wallet
required: false
schema:
type: string
pattern: '^0x[a-fA-F0-9]{40}$'
- in: query
name: designation_code
required: false
schema:
type: string
responses:
'200':
description: Membership status resolved
content:
application/json:
schema:
$ref: '#/components/schemas/MembershipStatusResponse'
components:
schemas:
WalletIntentRequest:
type: object
required: [address, origin, locale, chain_id]
properties:
address:
type: string
pattern: '^0x[a-fA-F0-9]{40}$'
origin:
type: string
format: uri
locale:
type: string
chain_id:
type: integer
WalletIntentResponse:
type: object
required: [intent_id, designation_code, display_token, nonce, issued_at, expires_at, chain_id]
properties:
intent_id:
type: string
designation_code:
type: string
display_token:
type: string
nonce:
type: string
issued_at:
type: string
format: date-time
expires_at:
type: string
format: date-time
domain_name:
type: string
chain_id:
type: integer
verifying_contract:
type: string
WalletVerifyRequest:
type: object
required: [intent_id, address, chain_id, signature]
properties:
intent_id:
type: string
address:
type: string
pattern: '^0x[a-fA-F0-9]{40}$'
chain_id:
type: integer
signature:
type: string
WalletVerifyResponse:
type: object
required: [status, designation_code, display_token, verified_at]
properties:
status:
type: string
enum: [signature_verified]
designation_code:
type: string
display_token:
type: string
verified_at:
type: string
format: date-time
MembershipQuoteRequest:
type: object
required: [designation_code, address, chain_id]
properties:
designation_code:
type: string
address:
type: string
pattern: '^0x[a-fA-F0-9]{40}$'
chain_id:
type: integer
payer_wallet:
type: string
pattern: '^0x[a-fA-F0-9]{40}$'
payer_proof:
type: string
description: Owner-signed personal-signature proof for distinct payer wallets.
sponsor_org_root_id:
type: string
MembershipQuoteResponse:
type: object
required: [quote_id, chain_id, currency, amount_atomic, deadline, contract_address]
properties:
quote_id:
type: string
chain_id:
type: integer
currency:
type: string
enum: [USDC, ETH]
amount:
type: string
amount_atomic:
type: string
decimals:
type: integer
deadline:
type: string
format: date-time
contract_address:
type: string
method:
type: string
calldata:
type: string
value:
type: string
owner_wallet:
type: string
payer_wallet:
type: string
sponsorship_mode:
type: string
enum: [self, sponsored, sponsored_company]
sponsor_org_root_id:
type: string
tx:
type: object
additionalProperties: true
MembershipConfirmRequest:
type: object
required: [designation_code, quote_id, tx_hash, address, chain_id]
properties:
designation_code:
type: string
quote_id:
type: string
tx_hash:
type: string
pattern: '^0x[a-fA-F0-9]{64}$'
address:
type: string
pattern: '^0x[a-fA-F0-9]{40}$'
chain_id:
type: integer
MembershipConfirmResponse:
type: object
required: [status, designation_code, display_token, tx_hash, activated_at]
properties:
status:
type: string
enum: [membership_active]
designation_code:
type: string
display_token:
type: string
tx_hash:
type: string
activated_at:
type: string
format: date-time
MembershipStatusResponse:
type: object
required: [status]
properties:
status:
type: string
enum: [active, none, suspended, revoked, unknown]
wallet:
type: string
designation_code:
type: string