GNX Courage Text™ · hoKssi.com · Controlled Enterprise Review

GNX Courage Text™ / hoKssi.com · API

상태 전이와 인증 경계 API

Generated 2026-05-10 06:59:54 UTC · Current engine mode: device_handoff / outbound locked

1. 현재 제품 경계

hoKssi.com은 번호를 모르는 상대에게 서버가 몰래 문자를 보내는 서비스가 아니다. 현재 엔진은 요청자 기기에서 생성한 handoff card를 통해 수신자가 직접 확인 경로에 들어오고, 1 또는 2 선택에 따라 문자앱 또는 relay 상태가 열리는 device handoff 구조다.

현재 운영 모드는 ENABLE_OUTBOUND_SEND=false, DELIVERY_MODE=device_handoff, SMS_PROVIDER=unconfigured 이다. 따라서 서버 worker는 외부 SMS 발송을 하지 않고 outbound queue를 queued_not_sent 상태로 유지한다.

LayerCurrent FunctionBoundary
Web UI요청자 입력, CTP 코드, visible clues, requester phone consent, card createroot UI 변경 없이 사용자 입력만 수집
APIintent, handoff card, /c route, sms-link, admin, audit127.0.0.1:8080 behind Nginx
Workerburn, vaporize, safety gate, outbound blockexternal dispatch locked
NginxTLS, docs, root static UI, admin allowlist/docs static, /v1 proxy

2. 인증 경계

BoundaryAuthenticationNotes
/v1/admin/*x-admin-api-key + Nginx allowlist운영자만 접근
/v1/system/*x-admin-api-key + allowlistburn-expired 등 시스템 동작
/v1/sms/*x-webhook-secretprovider webhook 또는 테스트 시뮬레이션
/v1/intents/:id/statusview_token요청자 상태 조회
/v1/intents/:id/handoff-cardview_tokencard payload 조회
/c/:codehidden handoff code수신자 확인 화면
/v1/handoff/:code/sms-linkhidden handoff code + digit수신자 선택 후 iPhone SMS compose

view_token은 requester에게 한 번 제공되는 임시 조회 권한이다. handoff_code는 사용자 card_text에는 보이지 않고 share.url 내부 또는 /c route binding으로만 사용한다.

3. 핵심 API

MethodPathPurposeAuth
GET/healthDB/Redis/API 상태none
POST/v1/admin/license/accounts라이선스 발급admin key
POST/v1/intentsText Intent 생성license key
GET/v1/intents/:id/status상태 조회view token
GET/v1/intents/:id/handoff-cardvisible card + share url 조회view token
GET/c/:code수신자 확인 화면hidden code
POST/v1/handoff/:code/sms-link수신자 1/2 선택 후 requester phone SMS URL 생성hidden code
POST/v1/sms/inboundlegacy/direct SMS provider pathwebhook secret
POST/v1/consentlegacy consent pathwebhook secret
POST/v1/intents/:id/burn수동 소각admin key
POST/v1/system/burn-expired만료 소각admin key

Primary V1 user path is /v1/intents -> /v1/intents/:id/handoff-card -> /c/:code -> /v1/handoff/:code/sms-link. Legacy SMS claim/consent paths remain available for controlled testing but are not the active public-number path.

4. 상태 전이

FromToTriggerEvidence
OPENCONSENT_PENDING수신자 선택 준비 또는 legacy claimstate_transition
CONSENT_PENDINGRELAY_OPEN수신자가 1을 선택하거나 direct handoff consent가 성립consent_proof / audit
OPEN or CONSENT_PENDINGREJECTED수신자가 2 선택consent proof
REJECTEDBURNED거절 후 소각burn_record
OPEN / CONSENT_PENDING / RELAY_OPENBURNEDTTL 만료 또는 worker burnworker_state_transition / worker_intent_burned
terminalignored중복 1/2 또는 만료 후 재사용terminal audit

terminal state는 RELAY_OPEN, REJECTED, BURNED, EXPIRED를 포함한다. terminal 이후 재선택은 relay payload를 다시 만들지 않아야 한다.

5. Payload contracts

visible_clues는 requester와 target 각각 gender, outfit, hair, position을 가진다. outfit, hair, position은 각 5자 제한이다. gender는 남/여 또는 남성/여성 alias를 normalize한다.

requester_contact는 phone과 disclosure_consent를 가진다. disclosure_consent=true일 때만 수신자 선택 후 requester phone을 SMS compose URL 또는 relay payload에 사용할 수 있다.

handoff card는 사용자 표시용 card_text와 내부 binding인 handoff_code를 분리한다. visible card에는 공용 문자번호와 visible code가 없어야 한다.

6. Error codes and operational behavior

ErrorMeaningOperator Action
license_key_requiredlicense enforcement activeCTP code 또는 admin license 발급 확인
invalid_or_inactive_licensekey invalid새 license 발급
visible_clue_text_too_longoutfit/hair/position 5자 초과UI 입력값 수정
handoff_not_foundcode binding 없음TTL 또는 card generation 확인
handoff_expired_or_closedterminal/expired새 intent 생성
requester_phone_not_availabledisclosure/TTL/secret 없음requester phone consent 확인
consent_claim_binding_requiredlegacy consent binding 없음legacy SMS flow 점검

7. API acceptance tests

Acceptance must include: health ok, handoff-card canonical, visible no-code, share.url /c/<hidden_code>, GET /c 200, POST sms-link returns sms:requester_phone body=1, direct legacy 1 CODE relay_open, direct legacy 2 CODE burned, code reuse blocked, expired code blocked, outbound queued_not_sent, worker outbound_dispatch_blocked.

A passing server must keep external dispatch locked until explicit provider unlock.