openapi: 3.0.3
info:
title: University of Melbourne — Spatial Urban Data Observatory (SUDO) API
version: v2
description: >-
Read surface of the Spatial Urban Data Observatory (SUDO), an
institution-operated GeoNode deployment run by the University of Melbourne
on its own `eresearch.unimelb.edu.au` host. SUDO is the one genuinely
institution-operated, publicly callable API found in this profile: an
unauthenticated JSON collection API over 7,417 spatial datasets, with
OGC-style bounding-box geometry, DOIs, licences and download links on every
record.
This document was DERIVED from live probes on 2026-08-19, not from a
contract the University publishes. Only endpoints that returned HTTP 200 on
that date are described. The University of Melbourne does not publish an
OpenAPI description of SUDO; GeoNode's own `/api/v2/openapi` and
`/api/v2/swagger.json` both return 404 on this deployment.
KNOWN DEFECTS, recorded rather than smoothed over:
* TLS certificate mismatch — https://sudo.eresearch.unimelb.edu.au
presents a certificate whose subject and only SAN is
`staging.unimelb-sudo.cloud.edu.au`. Standard clients reject the
connection; every probe below required certificate verification to be
disabled. The page title served is also `staging.unimelb-sudo.cloud.edu.au`,
so the production hostname appears to be fronting a staging instance.
* Intermittent timeouts — `/api/v2/categories` timed out at 60s on
2026-08-19 while `/api/v2/datasets` and `/api/v2/` answered normally.
contact:
name: University of Melbourne eResearch
url: https://sudo.eresearch.unimelb.edu.au/about/
x-operator: institution
x-software: GeoNode (OSGeo, GPL-3.0)
x-provenance:
generated: '2026-08-19'
method: derived
source: >-
Live probes of https://sudo.eresearch.unimelb.edu.au/api/v2/ ,
/api/v2/datasets?page_size=1 and /api/v2/datasets/999999999 on 2026-08-19.
Schema fields enumerated from the actual dataset record returned.
servers:
- url: https://sudo.eresearch.unimelb.edu.au/api/v2
description: Production hostname (see TLS defect in info.description)
tags:
- name: Discovery
description: Self-describing collection index
- name: Datasets
description: Spatial datasets held in the observatory
paths:
/:
get:
tags: [Discovery]
summary: Collection index
description: >-
Returns a flat JSON object mapping each available collection name to its
absolute URL. Verified 200 application/json, 1188 bytes, on 2026-08-19.
operationId: getCollectionIndex
responses:
'200':
description: Map of collection name to absolute collection URL
content:
application/json:
schema:
type: object
additionalProperties:
type: string
format: uri
example:
datasets: https://sudo.eresearch.unimelb.edu.au/api/v2/datasets
maps: https://sudo.eresearch.unimelb.edu.au/api/v2/maps
documents: https://sudo.eresearch.unimelb.edu.au/api/v2/documents
/datasets:
get:
tags: [Datasets]
summary: List spatial datasets
description: >-
Page through the observatory's spatial datasets. Verified 200 with
`total: 7417` on 2026-08-19. No authentication required and no
rate-limit headers are returned.
operationId: listDatasets
parameters:
- name: page
in: query
required: false
schema: { type: integer, minimum: 1, default: 1 }
- name: page_size
in: query
required: false
schema: { type: integer, minimum: 1, default: 10 }
responses:
'200':
description: A page of datasets
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetPage'
/datasets/{id}:
get:
tags: [Datasets]
summary: Retrieve one dataset
description: >-
Retrieve a single dataset by primary key. The 404 shape below was
verified against `/api/v2/datasets/999999999` on 2026-08-19.
operationId: getDataset
parameters:
- name: id
in: path
required: true
schema: { type: integer }
responses:
'200':
description: One dataset
content:
application/json:
schema:
type: object
properties:
dataset:
$ref: '#/components/schemas/Dataset'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
detail: Not found.
components:
schemas:
DatasetPage:
type: object
required: [links, total, page, page_size, datasets]
properties:
links:
type: object
properties:
next: { type: string, format: uri, nullable: true }
previous: { type: string, format: uri, nullable: true }
total: { type: integer, example: 7417 }
page: { type: integer, example: 1 }
page_size: { type: integer, example: 1 }
datasets:
type: array
items:
$ref: '#/components/schemas/Dataset'
Dataset:
type: object
description: >-
Field set enumerated from a live record on 2026-08-19. Only fields
actually present on that record are described; types are inferred from
the observed values and are marked as such.
properties:
pk: { type: integer }
uuid: { type: string }
title: { type: string }
abstract: { type: string }
raw_abstract: { type: string }
purpose: { type: string, nullable: true }
name: { type: string }
resource_type: { type: string, example: dataset }
subtype: { type: string, nullable: true }
doi: { type: string, nullable: true }
date: { type: string, format: date-time }
date_type: { type: string }
created: { type: string, format: date-time }
last_updated: { type: string, format: date-time }
language: { type: string }
category: { type: object, nullable: true }
keywords: { type: array, items: { type: object } }
tkeywords: { type: array, items: { type: object } }
regions: { type: array, items: { type: object } }
license: { type: object, nullable: true }
constraints_other: { type: string, nullable: true }
data_quality_statement: { type: string, nullable: true }
supplemental_information: { type: string, nullable: true }
attribution: { type: string, nullable: true }
owner: { type: object }
poc: { type: array, items: { type: object } }
metadata_author: { type: array, items: { type: object } }
publisher: { type: array, items: { type: object } }
custodian: { type: array, items: { type: object } }
distributor: { type: array, items: { type: object } }
originator: { type: array, items: { type: object } }
principal_investigator: { type: array, items: { type: object } }
processor: { type: array, items: { type: object } }
resource_provider: { type: array, items: { type: object } }
resource_user: { type: array, items: { type: object } }
bbox_polygon: { type: object, description: GeoJSON Polygon }
ll_bbox_polygon: { type: object, description: GeoJSON Polygon, lat/long }
extent: { type: object }
srid: { type: string, example: 'EPSG:4326' }
spatial_representation_type: { type: object, nullable: true }
has_time: { type: boolean }
has_elevation: { type: boolean }
temporal_extent_start: { type: string, format: date-time, nullable: true }
temporal_extent_end: { type: string, format: date-time, nullable: true }
time_regex: { type: string, nullable: true }
elevation_regex: { type: string, nullable: true }
is_mosaic: { type: boolean }
is_approved: { type: boolean }
is_published: { type: boolean }
is_copyable: { type: boolean }
advertised: { type: boolean }
featured: { type: boolean }
favorite: { type: boolean }
metadata_only: { type: boolean }
metadata_uploaded_preserve: { type: boolean }
processed: { type: boolean }
state: { type: string }
store: { type: string, nullable: true }
workspace: { type: string, nullable: true }
charset: { type: string }
edition: { type: string, nullable: true }
group: { type: object, nullable: true }
maintenance_frequency: { type: string, nullable: true }
restriction_code_type: { type: object, nullable: true }
sourcetype: { type: string }
ptype: { type: string, nullable: true }
polymorphic_ctype_id: { type: integer }
default_style: { type: object, nullable: true }
styles: { type: array, items: { type: object } }
featureinfo_custom_template: { type: string, nullable: true }
alternate: { type: string, nullable: true }
perms: { type: array, items: { type: string } }
rating: { type: integer }
popular_count: { type: integer }
share_count: { type: integer }
detail_url: { type: string }
embed_url: { type: string }
thumbnail_url: { type: string }
download_url: { type: string, nullable: true }
download_urls: { type: array, items: { type: object } }
link: { type: string, nullable: true }
links: { type: array, items: { type: object } }
assets: { type: array, items: { type: object } }
raw_constraints_other: { type: string, nullable: true }
raw_data_quality_statement: { type: string, nullable: true }
raw_purpose: { type: string, nullable: true }
raw_supplemental_information: { type: string, nullable: true }
Error:
type: object
properties:
detail: { type: string }