API Docs
USDM SDR-호환 외부 읽기 API. 인증 없이 호출 가능합니다. Base URL: https://your-host
GET
/api/public/sdr-versions— sdr-versionsstudy_key의 모든 업로드 버전 목록 (최신 내림차순).
Query params
| Name | Type | Required | Description |
|---|---|---|---|
| studyId | string | yes | study_key 값 |
cURL
curl 'https://your-host/api/public/sdr-versions?studyId=STUDY-001'
예시 응답
{
"studyId": "STUDY-001",
"versions": [
{
"v": 2,
"status": "stored",
"schemaValid": true,
"conformanceStatus": "skipped",
"title": "A Phase 2 Study of …",
"createdAt": "2026-06-01T10:00:00Z"
},
{
"v": 1,
"status": "stored",
"schemaValid": true,
"conformanceStatus": "skipped",
"title": "A Phase 2 Study of …",
"createdAt": "2026-05-20T08:30:00Z"
}
]
}POST
/api/public/sdr-search— sdr-search스터디 검색. 각 결과는 최신 버전 기준의 study 봉투(envelope)와 관련 링크를 포함합니다.
JSON body
| Name | Type | Required | Description |
|---|---|---|---|
| q | string | no | 이름(name) 부분 일치 |
| sponsor | string | no | sponsor_name 정확 일치 |
| phase | string | no | study_phase 정확 일치 |
| type | string | no | study_type 정확 일치 |
| page | number | no | 기본 1 |
| pageSize | number | no | 기본 20, 최대 100 |
cURL
curl -X POST 'https://your-host/api/public/sdr-search' \
-H 'Content-Type: application/json' \
-d '{"q":"study"}'예시 응답
{
"results": [
{
"study": {
"studyId": "STUDY-001",
"v": 2,
"name": "Acme-001",
"title": "A Phase 2 Study of …",
"protocolId": "ACM-001",
"sponsor": "Acme Pharma",
"phase": "Phase 2",
"type": "Interventional",
"status": "stored",
"schemaValid": true,
"conformanceStatus": "skipped",
"counts": {
"arms": 2,
"epochs": 3,
"visits": 12,
"activities": 18,
"objectives": 5,
"eligibility": 9
},
"createdAt": "2026-06-01T10:00:00Z"
},
"links": {
"self": "/api/public/sdr-study?studyId=STUDY-001&v=2",
"soa": "/api/public/sdr-soa?studyId=STUDY-001&v=2",
"versions": "/api/public/sdr-versions?studyId=STUDY-001",
"revisions": "/api/public/sdr-revisions?studyId=STUDY-001"
}
}
],
"page": 1,
"pageSize": 20,
"total": 1
}GET
/api/public/sdr-study— sdr-study단일 스터디 버전의 메타데이터 + 링크. 없으면 {notFound:true}.
Query params
| Name | Type | Required | Description |
|---|---|---|---|
| studyId | string | yes | study_key 값 |
| v | number | no | 버전, 생략 시 최신 |
cURL
curl 'https://your-host/api/public/sdr-study?studyId=STUDY-001&v=2'
예시 응답
{
"study": {
"studyId": "STUDY-001",
"v": 2,
"name": "Acme-001",
"title": "A Phase 2 Study of …",
"protocolId": "ACM-001",
"sponsor": "Acme Pharma",
"phase": "Phase 2",
"type": "Interventional",
"status": "stored",
"schemaValid": true,
"conformanceStatus": "skipped",
"counts": {
"arms": 2,
"epochs": 3,
"visits": 12,
"activities": 18,
"objectives": 5,
"eligibility": 9
},
"createdAt": "2026-06-01T10:00:00Z"
},
"links": {
"self": "/api/public/sdr-study?studyId=STUDY-001&v=2",
"soa": "/api/public/sdr-soa?studyId=STUDY-001&v=2",
"versions": "/api/public/sdr-versions?studyId=STUDY-001",
"revisions": "/api/public/sdr-revisions?studyId=STUDY-001"
}
}GET
/api/public/sdr-soa— sdr-soaSchedule of Activities. mainTimeline 우선 + sub-timeline. matrix는 {activityId:{columnId:true}} 형태.
Query params
| Name | Type | Required | Description |
|---|---|---|---|
| studyId | string | yes | study_key |
| v | number | no | 버전, 생략 시 최신 |
cURL
curl 'https://your-host/api/public/sdr-soa?studyId=STUDY-001&v=2'
예시 응답
{
"studyId": "STUDY-001",
"v": 2,
"scheduleTimelineSoA": [
{
"timelineId": "TL-main",
"name": "Main Schedule",
"isMain": true,
"columns": [
{
"id": "VI-1",
"label": "Screening",
"sequence": 0,
"kind": "activity",
"encounterLabel": "Screening"
},
{
"id": "VI-2",
"label": "Day 1",
"sequence": 1,
"kind": "activity",
"encounterLabel": "Day 1"
}
],
"rows": [
{
"id": "ACT-1",
"label": "Informed consent"
},
{
"id": "ACT-2",
"label": "Vital signs"
}
],
"matrix": {
"ACT-1": {
"VI-1": true
},
"ACT-2": {
"VI-1": true,
"VI-2": true
}
}
}
]
}GET
/api/public/sdr-revisions— sdr-revisionsstudy의 개정(업로드) 이력. sdr-versions와 동일한 행을 revisions 키로 노출.
Query params
| Name | Type | Required | Description |
|---|---|---|---|
| studyId | string | yes | study_key |
cURL
curl 'https://your-host/api/public/sdr-revisions?studyId=STUDY-001'
예시 응답
{
"studyId": "STUDY-001",
"revisions": [
{
"v": 2,
"status": "stored",
"schemaValid": true,
"conformanceStatus": "skipped",
"title": "…",
"createdAt": "2026-06-01T10:00:00Z"
},
{
"v": 1,
"status": "stored",
"schemaValid": true,
"conformanceStatus": "skipped",
"title": "…",
"createdAt": "2026-05-20T08:30:00Z"
}
]
}