Getting Started
Generate Your First SOAP Note
Go from zero to a structured SOAP note in under 5 minutes using cURL, JavaScript, or Python.
Updated March 18, 2026
Prerequisites
- A SOAPNoteAPI account. Sign up for free at app.soapnoteapi.com/signup.
- An API key. Create one from the dashboard. Test keys (snapi_sk_test_...) include 10 free requests per day.
- An HTTP client: cURL, Node.js with fetch, Python with requests, or any language that can make HTTP POST requests.
Make your first request
The minimum request requires two fields: transcript (the clinical text to convert) and specialty (the medical specialty for formatting). Send them as JSON to POST /v1/note.
cURL
curl -X POST https://api.soapnoteapi.com/v1/note \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transcript": "Patient is a 38-year-old female presenting for follow-up of hypertension. She reports compliance with lisinopril 10mg daily. Denies headaches, chest pain, or shortness of breath. Blood pressure today is 128/82. Heart rate 72. Lungs clear bilaterally. No peripheral edema. Assessment: hypertension, well controlled on current medication. Plan: continue lisinopril 10mg daily, recheck blood pressure in 3 months, reinforce low-sodium diet.",
"specialty": "nurse_practitioner"
}'JavaScript (fetch)
const response = await fetch("https://api.soapnoteapi.com/v1/note", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
transcript: "Patient is a 38-year-old female presenting for follow-up of hypertension. She reports compliance with lisinopril 10mg daily. Denies headaches, chest pain, or shortness of breath. Blood pressure today is 128/82. Heart rate 72. Lungs clear bilaterally. No peripheral edema. Assessment: hypertension, well controlled on current medication. Plan: continue lisinopril 10mg daily, recheck blood pressure in 3 months, reinforce low-sodium diet.",
specialty: "nurse_practitioner",
}),
});
const note = await response.json();
console.log(note);Python (requests)
import requests
response = requests.post(
"https://api.soapnoteapi.com/v1/note",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"transcript": "Patient is a 38-year-old female presenting for follow-up of hypertension. She reports compliance with lisinopril 10mg daily. Denies headaches, chest pain, or shortness of breath. Blood pressure today is 128/82. Heart rate 72. Lungs clear bilaterally. No peripheral edema. Assessment: hypertension, well controlled on current medication. Plan: continue lisinopril 10mg daily, recheck blood pressure in 3 months, reinforce low-sodium diet.",
"specialty": "nurse_practitioner",
},
)
note = response.json()
print(note)Read the response
A successful response contains the four SOAP sections -- subjective, objective, assessment, and plan -- along with a noteId you can use to retrieve the note later, and an expires_at timestamp indicating when the note will be automatically deleted from SOAPNoteAPI servers.
{
"noteId": "note_01jfg8h4kx9a3bc7d2ef",
"subjective": "38-year-old female presents for follow-up of essential hypertension. Patient reports good compliance with lisinopril 10mg daily. Denies headaches, chest pain, dizziness, or shortness of breath. No new symptoms or medication side effects reported.",
"objective": "Vital Signs: BP 128/82 mmHg, HR 72 bpm. Cardiovascular: Regular rate and rhythm, no murmurs. Lungs: Clear to auscultation bilaterally. Extremities: No peripheral edema noted.",
"assessment": "Essential hypertension (I10), well controlled on current antihypertensive regimen. Blood pressure at goal on lisinopril 10mg daily.",
"plan": "1. Continue lisinopril 10mg PO daily.\n2. Reinforce dietary modifications including low-sodium diet.\n3. Recheck blood pressure in 3 months.\n4. Routine labs (BMP, lipid panel) at next visit.",
"transcript": "Patient is a 38-year-old female presenting for follow-up of hypertension...",
"expires_at": "2026-06-18T00:00:00Z"
}Retrieve a note by ID
Use the noteId from the generation response to fetch the note again with GET /v1/note/:noteId. This is useful for polling after async audio uploads or retrieving a note within its retention window.
cURL
curl https://api.soapnoteapi.com/v1/note/note_01jfg8h4kx9a3bc7d2ef \
-H "Authorization: Bearer YOUR_API_KEY"JavaScript (fetch)
const response = await fetch(
"https://api.soapnoteapi.com/v1/note/note_01jfg8h4kx9a3bc7d2ef",
{
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
}
);
const note = await response.json();
console.log(note);Python (requests)
import requests
response = requests.get(
"https://api.soapnoteapi.com/v1/note/note_01jfg8h4kx9a3bc7d2ef",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
note = response.json()
print(note)The response includes a status field. For text-based notes, the status is always "completed". For audio-based notes, it may be "processing", "completed", or "failed".
Next steps
- Audio Upload -- Generate SOAP notes directly from audio recordings without building your own transcription pipeline.
- Specialties and Templates -- Choose the right specialty and template for accurate, specialty-specific note formatting.
- Streaming -- Stream notes in real time with Server-Sent Events for a responsive provider experience.
- API Reference -- Full endpoint reference with all request and response fields at /docs.
Need help? Contact support@soapnoteapi.com