The v1 API has the following request form:
https://smmdb.ddns.net/api/request?querystring
Authorization is done via API-key. Any request that requires authorization needs a header containing the following information:
'Authorization': 'APIKEY <apikey>'
Request: getstats
Method: GET
Querystring: empty
Example: https://smmdb.ddns.net/api/getstats
Request: getcourses || getcourses64
Method: GET
Authorization: Optional
Querystring: (default values are italic)
| Query | Value | Description |
|---|---|---|
| format | json | ini |
Order direction of courses |
| order | lastmodified | uploaded | title | stars |
Order of courses |
| dir | asc | desc |
Order direction of courses |
| limit | {number} | 120 |
Limit maximum amount of sent courses (max: 100) |
| start | {number} | 0 |
Start index for pagination |
| random | 0 | 1 |
Receive random courses wrt filters |
| filter | {Array<string>} delimited with comma |
Limit response values attributes, e.g. filter=id,stars |
| ids | {Array<string>} delimited with comma |
Return only courses with specific id |
| lastmodifiedfrom | {number} |
Unix timestamp lower limit for lastmodified value |
| lastmodifiedto | {number} |
Unix timestamp upper limit for lastmodified value |
| uploadedfrom | {number} |
Unix timestamp lower limit for uploaded value |
| uploadedto | {number} |
Unix timestamp upper limit for uploaded value |
| difficultyfrom | {number} |
Difficulty setting lower limit (0: Easy, 1: Normal, 2: Expert, 3: Super Expert) |
| difficultyto | {number} |
Difficulty setting upper limit (0: Easy, 1: Normal, 2: Expert, 3: Super Expert) |
| title | {string} |
Title's substring, case-insensitive |
| maker | {string} |
Maker's exact name, case-insensitive |
| uploader | {string} |
Uploader's exact name, case-insensitive |
| gamestyle | {number} |
Game style of course (0: SMB, 1: SMB3, 2: SMW, 3: NSMBU) |
| coursetheme | {number} |
Course theme (0: Ground, 1: Underground, 2: Castle, 3: Airship, 4: Underwater, 5: Ghost House) |
| coursethemesub | {number} |
Subcourse theme (0: Ground, 1: Underground, 2: Castle, 3: Airship, 4: Underwater, 5: Ghost House) |
| timefrom | {number} |
Course completion time lower limit in seconds |
| timeto | {number} |
Course completion time upper limit in seconds |
| autoscroll | {number} | 0 |
Auto scroll speed (0: disabled, 1: slow, 2: medium, 3: fast) |
| autoscrollsub | {number} | 0 |
Auto scroll speed of sub course |
| widthfrom | {number} |
Course width lower limit in block |
| widthto | {number} |
Course width upper limit in block |
| widthsubfrom | {number} |
Subcourse width lower limit in block |
| widthsubto | {number} |
Subcourse width upper limit in block |
| prettify | 0 | 1 |
Pretty print json response |
Example: https://smmdb.ddns.net/api/getcourses?limit=50&start=121&prettify=1
Receive courses 121 to 170 in lastmodified descending order with indentation.
Response: Array<Course> || Array<Course64> where
Course:
| Attribute | Value | Description |
|---|---|---|
| id | {string} |
Unique course ID |
| [header.type] | {number} |
Header type |
| [header.data] | {string} |
Base64 encoded 0xF0 original course data header |
| owner | {string} |
Unique owner ID |
| title | {string} |
Course title |
| maker | {string} |
Course maker name |
| gameStyle | {string} |
Game style |
| courseTheme | {string} |
Course theme |
| courseThemeSub | {string} |
Course theme sub world |
| time | {string} |
Completion time |
| autoScroll | {string} |
Auto scroll |
| autoScrollSub | {string} |
Auto scroll sub world |
| width | {string} |
Course width in blocks |
| widthSub | {string} |
Subcourse width in blocks |
| nintendoid | {string} |
Unique Nintendo course ID |
| videoid | {string} |
YouTube video ID |
| difficulty | {string} |
Course difficulty (0: Easy, 1: Normal, 2: Expert, 3: Super Expert) |
| lastmodified | {number} |
Unix timestamp of last modification |
| uploaded | {number} |
Unit timestamp of upload date |
| vPrev | {number} |
Version number for 4:3 thumbnail (can be used for long term caching) |
| vFull | {number} |
Version number for full course thumbnail (can be used for long term caching) |
| stars | {string} |
Received stars |
| [starred] | {boolean} |
(Authorization required) whether user has starred this course |
Course64:
| Attribute | Value | Description |
|---|---|---|
| id | {string} |
Unique course ID |
| owner | {string} |
Unique owner ID |
| title | {string} |
Course title |
| uploader | {string} |
Course uploader name |
| courseTheme | {string} |
Course theme |
| courseStars | {number} |
Amount of collectible stars |
| difficulty | {string} |
Course difficulty (0: Easy, 1: Normal, 2: Expert, 3: Super Expert) |
| lastmodified | {number} |
Unix timestamp of last modification |
| uploaded | {number} |
Unit timestamp of upload date |
| videoid | {string} |
YouTube video ID |
| vImg | {number} |
Version number for course thumbnail (can be used for long term caching) |
| stars | {string} |
Received stars |
| [starred] | {boolean} |
(Authorization required) whether user has starred this course |
Request: downloadcourse || downloadcourse64
Method: GET
Authorization: No
Querystring: (default values are italic)
| Query | Value | Description |
|---|---|---|
| id | {string} |
Course ID |
| type | zip | 3ds | json | protobuf |
MIME type of response. 3ds supports Accept-Ranges: bytes HTTP header |
Example: https://smmdb.ddns.net/api/downloadcourse?id=ihavenoidea&type=zip
Downloads course with ID ihavenoidea as zip-compressed folder.
Request: uploadcourse || uploadcourse64
Method: POST
Authorization: Yes
Header:
| Directives | Description |
|---|---|
| Content-Type: application/octet-stream |
Querystring: empty
POST body: Raw binary data with header { 'Content-Type': 'application/octet-stream', 'Authorization': 'APIKEY myapikey' }. Server assumes zip/7z compressed files to contain Wii U courses. Raw binary data is checked, if it is a 3DS course. Server accepts gzipped/deflated streams.
Request: updatecourse
Method: POST
Authorization: Yes
Header:
| Directives | Description |
|---|---|
| Content-Type: application/octet-stream |
Querystring:
| Query | Value | Description |
|---|---|---|
| id | {string} |
Course ID |
POST body: Must contain JSON.stringified Object with Object properties to change.
Example: https://smmdb.ddns.net/api/updatecourse?id=mycourseid
with header { 'Authorization': 'APIKEY myapikey' }' and body { 'maker': 'newMaker' }
Changes maker of course with specified course ID.
Request: deletecourse
Method: POST
Authorization: Yes
Header:
| Directives | Description |
|---|---|
| Content-Type: application/octet-stream |
Querystring:
| Query | Value | Description |
|---|---|---|
| id | {string} |
Course ID |
Example: https://smmdb.ddns.net/api/deletecourse?id=mycourseid
with header { 'Authorization': 'APIKEY myapikey' }'
Deletes course with specified course ID.
Request: setaccountdata
Method: POST
Authorization: Yes
Header:
| Directives | Description |
|---|---|
| Content-Type: application/octet-stream |
Querystring: empty
POST body: Must contain JSON.stringified Object with Object properties to change.
Example: https://smmdb.ddns.net/api/setaccountdata
with header { 'Authorization': 'APIKEY myapikey' }' and body { 'username': 'newUsername' }
Changes username of user with specified API key.
Add documentation for other API endpoints.