Publication pipeline
Submit representation bytes and metadata; the hosted service validates known formats, hashes all content, writes immutable storage, indexes the version, and returns canonical URLs.
Multipart file upload
const metadata = {
schema: 'aso/object/v0.1', id: 'studio-chair', version: '1.0.0',
name: 'Studio chair', description: 'Portable chair mesh', tags: ['furniture'],
createdAt: new Date().toISOString(), provenance: { adapter: 'my-adapter@1' },
generator: { provider: 'my-provider', model: 'model-name' },
representation: { id: 'primary', type: 'mesh', format: 'glb', mediaType: 'model/gltf-binary' }
};
const form = new FormData();
form.set('metadata', JSON.stringify(metadata));
form.set('asset', file);
await fetch('/api/v1/publications', { method: 'POST', headers: { authorization: `Bearer ${firebaseIdToken}` }, body: form });Representation policy
ASO accepts meshes (GLB, glTF, OBJ, FBX, STL, 3MF, COLLADA, and USD variants), point clouds (PLY, PCD, LAS, LAZ, and XYZ), Gaussian splats (SPLAT, SPZ, and KSPLAT), and explicit custom format tokens. GLB and glTF receive structural validation. Other formats are stored as opaque bounded bytes with their declared media type, real byte length, and computed SHA-256; recognizing a format does not imply browser preview support.
HTTPS URL source
POST JSON shaped as { metadata, sourceUrl }. Exactly one of sourceUrl or stagedKey is accepted. Sources must be public HTTPS, do not redirect, and are bounded to 100 MiB and 30 seconds. Staging accepts any syntactically valid media type.
Auth and errors
Use a Firebase ID token as Bearer auth or a provisioned x-api-key. Expect structured 400, 401, 409, 413, 422, 429, 500, and 503 responses. A 409 means that immutable identity/version already exists.