{ "openapi": "3.0.3", "paths": { "/users": { "post": { "description": "\nThis operation creates a new **user** in the Hosted API. If a **user** with the same **token** already exists,\ntheir meta data is updated instead of creating a duplicate.\n\nAfter a user is registered, you can create scans for this user with the `/scans` endpoint by providing the \nsame **token**.\n\nThe **token** is the unique identifier of the user in your system. \nIt must not contain an email address or any other personally identifiable information (PII).\n", "operationId": "UsersController_upsert_1", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertUserDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Register a new user.", "tags": [ "Users" ] } }, "/users/{token}": { "get": { "description": "\nThis operation returns the meta data of a specific **user** identified by the partner-provided **token**.\n\nOptionally, you can use the `unit-system` query parameter to receive values in **metric** or **imperial** units.\n", "operationId": "UsersController_findOne_1", "parameters": [ { "name": "token", "required": true, "in": "path", "description": "A unique token for the user provided by the partner. It must not contain an email address or any other PII.", "schema": { "example": "unique-user-token", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get meta data of a user.", "tags": [ "Users" ] }, "patch": { "description": "\nThis operation updates the meta data of a specific **user** identified by the partner-provided **token**.\n\nSend only the fields you want to change in the request body; all other fields remain unchanged.\nThe **token** itself cannot be changed by this operation.\n", "operationId": "UsersController_update_1", "parameters": [ { "name": "token", "required": true, "in": "path", "description": "A unique token for the user provided by the partner. It must not contain an email address or any other PII.", "schema": { "example": "unique-user-token", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Update meta data of a user.", "tags": [ "Users" ] }, "delete": { "description": "\nThis operation deletes a specific **user** identified by the partner-provided **token**.\n\nAfter deletion, the user can no longer be used for new scans or future me predictions.\n", "operationId": "UsersController_delete_1", "parameters": [ { "name": "token", "required": true, "in": "path", "description": "A unique token for the user provided by the partner. It must not contain an email address or any other PII.", "schema": { "example": "unique-user-token", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/UserDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Delete a user.", "tags": [ "Users" ] } }, "/scans": { "post": { "description": "\nThis operation registers a new **scan** in the Hosted API for an existing **user**.\n\nTo associate the scan with the correct **user**, provide the same **token** in the request body that you used when registering the user via the `/users` endpoint.\n", "operationId": "ScansController_create_1", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateScanDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/ScanDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Register a new scan.", "tags": [ "Scans" ] }, "get": { "description": "\nThis operation returns a paginated list of **scans** available for a specific **user** identified by the partner-provided **token**.\n\nUse the `limit`, `cursor`, and `order` query parameters to control pagination behavior.\n\nOptionally, you can use the `unit-system` query parameter to receive values in **metric** or **imperial** units.\n", "operationId": "ScansController_findAll_1", "parameters": [ { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Sorting order used for pagination. Determines how the cursor is applied (for example, ascending or descending by creation time).", "schema": { "enum": [ "asc", "desc" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor pointing to the position in the scan list from which the next page should start. Usually taken from the previous response.", "schema": { "type": "string" } }, { "name": "limit", "required": false, "in": "query", "description": "Maximum number of scans to return in a single page.", "schema": { "example": 20, "type": "number" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "type": "object" } } } } }, "security": [ { "bearer": [] } ], "summary": "List scans.", "tags": [ "Scans" ] } }, "/scans/{id}": { "get": { "description": "\nThis operation provides the current **status** and details of a specific **scan**.\n\nUse this endpoint to poll the processing status after registering a scan or to retrieve its latest state for display in your application.\n", "operationId": "ScansController_findOne_1", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/ScanDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get status of a scan.", "tags": [ "Scans" ] }, "delete": { "description": "\nThis operation deletes a specific **scan**.\n\nAfter deletion, the scan and its associated data are no longer available for retrieval or reporting.\n", "operationId": "ScansController_remove_1", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/ScanDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Delete a scan.", "tags": [ "Scans" ] } }, "/scans/{scanId}/measurements": { "get": { "description": "\nThis operation provides the detailed **body measurements** derived from a specific **scan**.\n\nOptionally, you can use the `unit-system` query parameter to receive measurements in **metric** or **imperial** units.\n", "operationId": "MeasurementController_findOne_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/MeasurementDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get body measurements of a scan.", "tags": [ "Scans - Reports" ] } }, "/scans/{scanId}/upload-url": { "post": { "description": "\nThis operation provides a pre-signed **upload URL** for a specific **scan**.\n\nUse the returned URL to upload the capture data for this scan directly with a **PUT** request to Prism.\n", "operationId": "ScanUploadUrlController_create_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } } ], "responses": { "201": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/ScanUploadUrlDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get upload URL for a scan.", "tags": [ "Scans" ] } }, "/scans/{scanId}/scan-assets": { "get": { "description": "\nThis operation provides the **asset status** for a specific **scan**, including which assets are generated and available.\n\nUse this endpoint to check whether visual assets like models or preview images are ready.\n", "operationId": "ScanAssetsController_findOne_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/ScanAssetsDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get asset status of a scan.", "tags": [ "Scans - Assets" ] } }, "/body-shape-prediction/{bodyShapePredictionId}/asset-urls": { "get": { "description": "\nThis operation provides the download **URLs** for all available **assets** of a specific **body shape prediction**.", "operationId": "BodyShapePredictionAssetUrlsController_findAll_1", "parameters": [ { "name": "bodyShapePredictionId", "required": true, "in": "path", "description": "The unique ID of the body shape prediction.", "schema": { "example": "unique-body-shape-prediction-id", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/BodyShapePredictionAssetUrlsDto" } } } } }, "summary": "Get asset URLs of a body shape prediction.", "tags": [ "Future Me - Assets" ] } }, "/scans/{scanId}/asset-urls": { "get": { "description": "\nThis operation provides the download **URLs** for all available **assets** of a specific **scan**.\n\nThe response includes URLs for assets such as preview images or 3D models.\n", "operationId": "ScanAssetUrlsController_findAll_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/ScanAssetUrlsDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get asset URLs of a scan.", "tags": [ "Scans - Assets" ] } }, "/scans/{scanId}/asset-urls/{assetType}": { "get": { "description": "\nThis operation provides the download **URL** for a specific **asset type** of a given **scan**.\n\nUse this endpoint when you only need one asset, such as the preview image or 3D model, instead of requesting all asset URLs.\n", "operationId": "ScanAssetUrlsController_findOne_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } }, { "name": "assetType", "required": true, "in": "path", "description": "The specific asset type of the scan", "schema": { "enum": [ "preview-image", "model", "canonical-body", "material", "texture", "stripes", "capture-video" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "type": "string" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get specific asset URL of a scan.", "tags": [ "Scans - Assets" ] } }, "/scans/{scanId}/bodyfat": { "get": { "description": "\nThis operation provides the **body fat** result derived from a specific **scan**.\n\nOptionally, you can use the `unit-system` query parameter to receive values in **metric** or **imperial** units.\n", "operationId": "BodyfatController_findOne_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/BodyfatDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get body fat of a scan.", "tags": [ "Scans - Reports" ] }, "patch": { "description": "\nThis operation updates the **body fat method** configuration of a specific **scan**.\n\nOptionally, you can use the `unit-system` query parameter to receive values in **metric** or **imperial** units.\n", "operationId": "BodyfatController_update_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateBodyfatDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/BodyfatDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Update body fat method of a scan.", "tags": [ "Scans - Reports" ] } }, "/users/{token}/terms": { "post": { "description": "\nThis operation records a **terms of service** acceptance for a specific user.\n\nYou identify the user by the partner-provided **token** in the path parameter.\nProvide the **version** of the terms in the request body; the API stores the acceptance state and timestamp.\n", "operationId": "TermsController_create_1", "parameters": [ { "name": "token", "required": true, "in": "path", "description": "A unique token for the user provided by the partner. It must not contain an email address or any other PII.", "schema": { "example": "unique-user-token", "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTermsDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/TermsDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Create a terms acceptance for a user.", "tags": [ "Users" ] }, "get": { "description": "\nThis operation returns all recorded **terms of service** acceptances for a specific user.\n\nYou identify the user by the partner-provided **token** in the path parameter.\nUse this endpoint to audit which terms versions a user has accepted and when.\n", "operationId": "TermsController_findAll_1", "parameters": [ { "name": "token", "required": true, "in": "path", "description": "A unique token for the user provided by the partner. It must not contain an email address or any other PII.", "schema": { "example": "unique-user-token", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TermsDto" } } } } } }, "security": [ { "bearer": [] } ], "summary": "List terms acceptances of a user.", "tags": [ "Users" ] } }, "/scans/{scanId}/health-report": { "get": { "description": "\nThis operation provides a consolidated **health report** derived from a specific **scan**.\n\nThe health report includes metrics such as body composition indicators and other scan-based health insights \nthat you can use for downstream analysis or to power your product experience.\n\nPlease note that this endpoint returns the full set of health report data only when the user's sex is set to \n**Male** or **Female**. When the user's sex is set to **Neutral**, the endpoint still returns a response with \nthe same overall structure, but only a subset of sections is populated.\n\nFor the full list of Health Report data sources and how they are used, please contact your Prism representative.\n\n**Body fat percentage report**\n- bodyFatPercentage: The percentage of your body that is fat. One of the top predictors of long-term health, \nlifespan, metabolism and athletic performance. Improve your body fat percentage by losing fat, building \nmuscle or both.\n- healthLabel: A health standard label.\n- percentile: How your body fat percentage compares to a reference population (e.g. 50th percentile means you \nare right at average).\n\n**Lean mass report**\n- leanMass: The amount of fat-free tissue in your body (mostly muscle, plus organs, bones and water). Higher \nlean mass is associated with better strength, metabolism and long-term health.\n- healthLabel: A health standard label.\n- percentile: How your lean mass compares to a reference population.\n\n**Fat mass report**\n- fatMass: The total amount of fat in your body. Closely linked to body fat percentage and cardiometabolic risk.\n- healthLabel: A health standard label.\n- percentile: How your fat mass compares to a reference population.\n\n**Waist circumference report**\n- waistCircumference: The circumference around your waist. A key indicator of visceral fat and \ncardiometabolic risk, often more predictive than weight or BMI alone.\n- healthLabel: A health standard label.\n- percentile: How your waist circumference compares to a reference population.\n\n**Waist-to-hip ratio report**\n- waistToHipRatio: The ratio of your waist circumference to your hip circumference. Captures fat \ndistribution (apple vs pear shape) and is strongly associated with cardiovascular and metabolic risk.\n- healthLabel: A health standard label.\n- percentile: How your waist-to-hip ratio compares to a reference population.\n\n**Waist-to-height ratio report**\n- waistToHeightRatio: The ratio of your waist circumference to your height. A simple screening metric \nwhere higher values generally indicate higher health risk.\n- healthLabel: A health standard label.\n- percentile: How your waist-to-height ratio compares to a reference population.\n\n**Metabolism report**\n- basalMetabolicRate: The number of calories your body burns at rest in a typical day. Closely linked to \nlean mass and overall metabolic health.\n- energyExpenditures: Estimated daily calorie needs for different activity levels (e.g. sedentary), based \non your BMR and profile.\n- recommendations: Calorie targets and guidance for cutting (fat loss) or building (muscle gain) based on \nyour current body composition and goals.\n\n**Metabolic age report**\n- metabolicAgeYears: Your estimated metabolic age based on how many calories you burn and your body \ncomposition, compared to people of different ages.\n- chronologicalAgeYears: Your actual age in years.\n- ageDeltaYears: The difference between your metabolic age and chronological age (negative is \n“metabolically younger”, positive is “metabolically older”).\n- percentile: How your metabolic profile compares to a reference population for your age and sex.\n\n**Appendicular lean mass report**\n- appendicularLeanMass: The amount of lean mass in your arms and legs. Often used to assess muscle \nhealth, sarcopenia risk and functional strength.\n- appendicularLeanMassIndexKgPerM2: Appendicular lean mass adjusted for height, which helps compare \npeople of different sizes.\n- category: A categorical interpretation of your appendicular lean mass \n(for example “Low”, “Normal” or “High” muscle).\n- percentile: How your appendicular lean mass compares to a reference population.\n- references: Scientific references used to derive the cut-offs and norms for appendicular lean mass.\n- disclaimer: Important notes about clinical interpretation and limitations of this metric.\n\n**Skeletal muscle mass report**\n- skeletalMuscleMass: The amount of skeletal muscle in your body, which drives strength, mobility \nand energy expenditure.\n- skeletalMuscleMassIndexKgPerM2: Skeletal muscle mass adjusted for height, to allow comparison across \nbody sizes.\n- category: A categorical interpretation of your skeletal muscle mass \n(for example “Low”, “Normal” or “High” muscle).\n- percentile: How your skeletal muscle mass compares to a reference population.\n- references: Scientific references used to derive the cut-offs and norms for skeletal muscle mass.\n- disclaimer: Important notes about clinical interpretation and limitations of this metric.\n", "operationId": "HealthReportController_findOne_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/HealthReportDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get the health report of a scan", "tags": [ "Scans - Reports" ] } }, "/body-shape-prediction": { "post": { "description": "This operation registers a new **Future Me** body shape prediction for a specific scan.\n\nUse this endpoint to simulate how a user's body shape and composition could change for a given goal (for example, a lower target weight or body fat percentage).\n\n**Note:** Either a target weight **or** a target body fat percentage must be specified, but not both at the same time.", "operationId": "BodyShapePredictionController_create_1", "parameters": [ { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateBodyShapePredictionDto" } } } }, "responses": { "201": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/BodyShapePredictionDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Register a new body shape prediction", "tags": [ "Future Me" ] } }, "/body-shape-prediction/{bodyShapePredictionId}": { "get": { "description": "\nThis operation returns the current **status** and details of a specific **body shape prediction**.\n\nUse this endpoint to poll the processing status after creating a prediction or to retrieve its latest state for display in your application.", "operationId": "BodyShapePredictionController_findOne_1", "parameters": [ { "name": "bodyShapePredictionId", "required": true, "in": "path", "description": "The unique ID of the body shape prediction.", "schema": { "example": "unique-body-shape-prediction-id", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/BodyShapePredictionDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get status of a body shape prediction", "tags": [ "Future Me" ] }, "delete": { "description": "\nThis operation deletes a specific **body shape prediction**.\nAfter deletion, the body shape prediction and its associated data are no longer available for retrieval or reporting.", "operationId": "BodyShapePredictionController_remove_1", "parameters": [ { "name": "bodyShapePredictionId", "required": true, "in": "path", "description": "The unique ID of the body shape prediction.", "schema": { "example": "unique-body-shape-prediction-id", "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "$ref": "#/components/schemas/BodyShapePredictionDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Delete a body shape prediction", "tags": [ "Future Me" ] } }, "/scans/{scanId}/body-shape-predictions": { "get": { "description": "\nThis operation returns all **body shape predictions** associated with a specific **scan**.\n\nUse this endpoint to list every **Future Me** prediction that has been created for the scan, for example to show a history of different target scenarios (weight or body fat goals) in your application.", "operationId": "BodyShapePredictionController_findByScanId_1", "parameters": [ { "name": "scanId", "required": true, "in": "path", "description": "The unique ID of the scan.", "schema": { "example": "unique-scan-id", "type": "string" } }, { "name": "unit-system", "required": false, "in": "query", "description": "The unit system in which values will be returned.", "schema": { "enum": [ "metric", "imperial" ], "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json;v=1": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/BodyShapePredictionDto" } } } } } }, "security": [ { "bearer": [] } ], "summary": "Get all body shape predictions for a scan", "tags": [ "Future Me" ] } } }, "info": { "title": "Prism Hosted API", "description": "", "version": "1", "contact": {} }, "tags": [ { "name": "Prism Hosted API", "description": "\n### Prism Hosted API\n\nWelcome to the Prism Hosted API.\n\n[Prism Labs](https://www.prismlabs.tech/) provides mobile 3D body scanning and body composition tracking. \nUse this API to personalize your product with body insights such as body fat and lean mass percentage, body circumference measurements, metabolic age, and body roundness index. \nWith a simple 10-second spin in front of a mobile phone, you can personalize your users’ weight loss journeys or workout plans.\n\nUse this API to:\n- Create and manage users\n- Create and manage body scans\n- Access 3D assets\n- Fetch body composition metrics and health reports\n- Create Future Me predictions\n- Access Future Me prediction assets\n\n---\n\n### Getting started\n\n{% stepper %}\n{% step %}\n### Set up an introduction call\nSet up an [introduction call](https://www.prismlabs.tech/contact) with us to exchange information, discuss use cases, and talk about pricing.\n{% endstep %}\n\n{% step %}\n### Kick off paperwork\nSign the API evaluation agreement, MNDA, and DPA.\n{% endstep %}\n\n{% step %}\n### Integration kick-off call\nAlign on your ideal outcome, learn about Prism integration pathways (native or web), and refine your use case and integration architecture.\n{% endstep %}\n\n{% step %}\n### Begin integration\nWe will provide your sandbox API key. \nDuring your integration we will assist you with any technical or product questions.\n{% endstep %}\n\n{% step %}\n### Integration checkpoints\nReview [consent screens](https://www.notion.so/2ce8ef4535c78002bbd9e90adcc2ddb0?pvs=25) to fulfill legal requirements.\n{% endstep %}\n\n{% step %}\n### Pre-launch check\nAfter all contracts are fully signed and consent screens are approved, we will provide your production API key and you can switch over to production.\n{% endstep %}\n{% endstepper %}\n\n---\n\n### Integration\n\n#### API URLs\n\n{% tabs %}\n{% tab title=\"Production\" %}\n**Production URL** \nhttps://api.hosted.prismlabs.tech\n{% endtab %}\n{% tab title=\"Sandbox\" %}\n**Sandbox URL** \nhttps://sandbox-api.hosted.prismlabs.tech\n{% endtab %}\n{% endtabs %}\n\n---\n\n#### API Headers\n\nFor all API calls the following headers are required:\n\n```http\ncontent-type: application/json\naccept: application/json;v=1\nauthorization: Bearer {{API_KEY}}\n```\nReplace {{API_KEY}} with your Prism API key for the selected environment.\n\n---\n\n#### API happy flow\n\n{% stepper %}\n{% step %}\n### Create a user\n`POST /users`\n{% endstep %}\n\n{% step %}\n### Initiate scan\n`POST /scans`\n{% endstep %}\n\n{% step %}\n### Get upload URL\n`POST /scans/{scanId}/upload-url`\n{% endstep %}\n\n{% step %}\n### Upload capture data\n`PUT {upload-url}`\n{% endstep %}\n\n{% step %}\n### Check scan status\n`GET /scans/{scanId}`\n{% endstep %}\n\n{% step %}\n### Fetch assets and body metrics for scan\n`GET /scans/{scanId}/asset-urls` \n`GET /scans/{scanId}/measurements` \n`GET /scans/{scanId}/bodyfat` \n`GET /scans/{scanId}/health-report`\n{% endstep %}\n\n{% step %}\n### (Optional) Initiate Future Me (body shape prediction)\n`POST /body-shape-prediction`\n{% endstep %}\n\n{% step %}\n### (Optional) Check Future Me status\n`GET /body-shape-prediction/{bodyShapePredictionId}`\n{% endstep %}\n\n{% step %}\n### (Optional) Fetch assets and metrics for Future Me\n`GET /body-shape-prediction/{bodyShapePredictionId}/asset-urls`\n{% endstep %}\n{% endstepper %}\n\n" }, { "name": "Users", "description": "### Create and manage users.\n\nA **User** represents an end-customer whose body scans, 3D assets, and body composition metrics you manage through the Prism Hosted API.\nEach user can have multiple scans over time, which are linked to this user record.\n\nAll Users endpoints require the following headers:\n```http\naccept: application/json;v=1\nauthorization: Bearer {{API_KEY}}\ncontent-type: application/json\n```\nReplace `{{API_KEY}}` with your Prism API key for the selected environment.", "parent": "Prism Hosted API" }, { "name": "Scans", "description": "### Create and manage body scans for users.\n\nEach scan generates body measurements, body composition metrics, various 3D and image assets, and can further generate **Future Me** predictions.\nScans are always linked to a specific user and can be created, queried, and deleted independently of other scans.\n\nCommon configurations:\n- Default Native Pipeline: assetConfigId == \"25f6d3a6-a634-40c3-8452-0342bee242d0\"\n- Default Web Pipeline: assetConfigId == \"ee651a9e-6de1-4621-a5c9-5d31ca874718\"\n- Legacy Native Pipeline: assetConfigId == \"c979ab6b-e46b-4c1c-89e1-bb02435b5cbf\"\n\nAll Scans endpoints require the following headers:\n```http\naccept: application/json;v=1\nauthorization: Bearer {{API_KEY}}\ncontent-type: application/json\n```\nReplace `{{API_KEY}}` with your Prism API key for the selected environment.", "parent": "Prism Hosted API" }, { "name": "Scans - Assets", "description": "### Access assets generated from user body scans.\n\nUse these endpoints to retrieve preview images, 3D body models and related visual assets generated for each scan.\nTypical use cases include powering scan galleries, 3D viewers and other visual experiences.\n\nAll Scans - Assets endpoints require the following headers:\n```http\naccept: application/json;v=1\nauthorization: Bearer {{API_KEY}}\ncontent-type: application/json\n```\nReplace `{{API_KEY}}` with your Prism API key for the selected environment.", "parent": "Scans" }, { "name": "Scans - Reports", "description": "### Access body composition and health reports for user scans.\n\nUse these endpoints to fetch derived metrics such as body fat, lean mass, circumferences, metabolic outputs and consolidated health reports for each scan.\nTypical use cases include powering health dashboards, progress tracking, coaching experiences and downstream analytics.\n\nAll Scans - Reports endpoints require the following headers:\n```http\naccept: application/json;v=1\nauthorization: Bearer {{API_KEY}}\ncontent-type: application/json\n```\nReplace `{{API_KEY}}` with your Prism API key for the selected environment.", "parent": "Scans" }, { "name": "Future Me", "description": "### Create Future Me predictions based on user scans.\n\nUse these endpoints to generate **Future Me** predictions that simulate how a user’s body shape and composition could change under different target conditions (for example, a lower body weight or body fat percentage).\nPredictions are always linked to an existing scan and can be queried or deleted independently of other scans.\n\nAll Future Me endpoints require the following headers:\n```http\naccept: application/json;v=1\nauthorization: Bearer {{API_KEY}}\ncontent-type: application/json\n```\nReplace `{{API_KEY}}` with your Prism API key for the selected environment.", "parent": "Prism Hosted API" }, { "name": "Future Me - Assets", "description": "### Access visual assets generated for Future Me predictions.\n\nUse these endpoints to retrieve preview images, 3D models and other visual assets that represent the predicted **Future Me** body shape.\nTypical use cases include before/after visualizations, coaching flows and product experiences that show users their potential future physique.\n\nAll Future Me - Assets endpoints require the following headers:\n```http\naccept: application/json;v=1\nauthorization: Bearer {{API_KEY}}\ncontent-type: application/json\n```\nReplace `{{API_KEY}}` with your Prism API key for the selected environment.", "parent": "Future Me" } ], "servers": [ { "url": "https://api.hosted.prismlabs.tech", "description": "Production environment for Prism Hosted API" }, { "url": "https://sandbox-api.hosted.prismlabs.tech", "description": "Sandbox environment for Prism Hosted API" } ], "components": { "securitySchemes": { "bearer": { "scheme": "bearer", "bearerFormat": "JWT", "type": "http", "name": "Authorization", "in": "header" } }, "schemas": { "Weight": { "type": "object", "properties": { "value": { "type": "number", "minimum": 1, "description": "The numeric weight", "example": 80 }, "unit": { "enum": [ "kg", "lb" ], "type": "string", "description": "The unit of the weight value", "example": "kg" } }, "required": [ "value", "unit" ] }, "Height": { "type": "object", "properties": { "value": { "type": "number", "minimum": 1, "description": "The numeric height", "example": 80 }, "unit": { "enum": [ "m", "in" ], "type": "string", "description": "The unit of the height value", "example": "m" } }, "required": [ "value", "unit" ] }, "UserTerms": { "type": "object", "properties": { "accepted": { "type": "boolean" }, "version": { "type": "string" } }, "required": [ "accepted" ] }, "UpsertUserDto": { "type": "object", "properties": { "email": { "type": "string", "nullable": true, "format": "email", "description": "Deprecated. The email address of the user. Do not set this field in new integrations.", "example": "" }, "token": { "type": "string", "description": "A unique token for the user provided by the partner. Must not contain email addresses or other PII.", "example": "unique-user-token" }, "weight": { "description": "The user's current body weight.", "example": { "value": 80, "unit": "kg" }, "allOf": [ { "$ref": "#/components/schemas/Weight" } ] }, "targetWeight": { "nullable": true, "description": "The user's target body weight.", "example": { "value": 80, "unit": "kg" }, "type": "object", "allOf": [ { "$ref": "#/components/schemas/Weight" } ] }, "height": { "description": "The user's body height.", "example": { "value": 1.8, "unit": "m" }, "allOf": [ { "$ref": "#/components/schemas/Height" } ] }, "sex": { "type": "string", "enum": [ "male", "female", "neutral", "undefined" ], "description": "The user's sex.", "example": "male" }, "region": { "type": "string", "enum": [ "africa", "asia", "caribbean", "central_america", "europe", "north_america", "oceania", "south_america" ], "description": "The user's geographical region.", "example": "north_america" }, "usaResidence": { "type": "string", "description": "The user's U.S. state of residence, if applicable.", "example": "California" }, "birthDate": { "type": "string", "description": "The user's birth date (ISO date, format YYYY-MM-DD).", "example": "1990-01-01" }, "researchConsent": { "type": "boolean", "description": "Indicates whether the user has consented to their data being used for research.", "example": true }, "termsOfService": { "description": "Indicates which version of the terms of service has been accepted.", "example": { "accepted": true, "version": "1" }, "allOf": [ { "$ref": "#/components/schemas/UserTerms" } ] } }, "required": [ "token", "weight", "height", "sex", "region", "birthDate", "researchConsent", "termsOfService" ] }, "UserDto": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique ID of the user in the Prism Hosted API.", "example": "unique-user-id" }, "sex": { "type": "string", "enum": [ "male", "female", "neutral", "undefined" ], "description": "The user's sex..", "example": "male" }, "region": { "type": "string", "enum": [ "africa", "asia", "caribbean", "central_america", "europe", "north_america", "oceania", "south_america" ], "description": "The user's geographical region.", "example": "north_america" }, "usaResidence": { "type": "string", "nullable": true, "description": "The user's U.S. state of residence, if applicable.", "example": "California" }, "birthDate": { "type": "string", "description": "The user's birth date (ISO date, format YYYY-MM-DD).", "example": "1990-01-01" }, "weight": { "description": "The user's current body weight.", "example": { "value": 80, "unit": "kg" }, "allOf": [ { "$ref": "#/components/schemas/Weight" } ] }, "targetWeight": { "nullable": true, "description": "The user's target body weight.", "example": { "value": 70, "unit": "kg" }, "type": "object", "allOf": [ { "$ref": "#/components/schemas/Weight" } ] }, "height": { "description": "The user's body height.", "example": { "value": 1.8, "unit": "m" }, "allOf": [ { "$ref": "#/components/schemas/Height" } ] }, "token": { "type": "string", "description": "A unique token for the user provided by the partner. Must not contain email addresses or other PII.", "example": "unique-user-token" }, "email": { "type": "string", "nullable": true, "description": "Deprecated. The email address of the user. Do not set this field in new integrations.", "example": "" }, "researchConsent": { "type": "boolean", "description": "Indicates whether the user has consented to their data being used for research.", "example": true } }, "required": [ "id", "sex", "region", "birthDate", "weight", "height", "token", "researchConsent" ] }, "UpdateUserDto": { "type": "object", "properties": { "email": { "type": "string", "nullable": true, "format": "email", "description": "Deprecated. The email address of the user. Do not set this field in new integrations.", "example": "" }, "token": { "type": "string", "description": "A unique token for the user provided by the partner. Must not contain email addresses or other PII.", "example": "unique-user-token" }, "weight": { "description": "The user's current body weight.", "example": { "value": 80, "unit": "kg" }, "allOf": [ { "$ref": "#/components/schemas/Weight" } ] }, "targetWeight": { "nullable": true, "description": "The user's target body weight.", "example": { "value": 80, "unit": "kg" }, "type": "object", "allOf": [ { "$ref": "#/components/schemas/Weight" } ] }, "height": { "description": "The user's body height.", "example": { "value": 1.8, "unit": "m" }, "allOf": [ { "$ref": "#/components/schemas/Height" } ] }, "sex": { "type": "string", "enum": [ "male", "female", "neutral", "undefined" ], "description": "The user's sex.", "example": "male" }, "region": { "type": "string", "enum": [ "africa", "asia", "caribbean", "central_america", "europe", "north_america", "oceania", "south_america" ], "description": "The user's geographical region.", "example": "north_america" }, "usaResidence": { "type": "string", "description": "The user's U.S. state of residence, if applicable.", "example": "California" }, "birthDate": { "type": "string", "description": "The user's birth date (ISO date, format YYYY-MM-DD).", "example": "1990-01-01" }, "researchConsent": { "type": "boolean", "description": "Indicates whether the user has consented to their data being used for research.", "example": true } } }, "CreateScanDto": { "type": "object", "properties": { "userToken": { "type": "string", "description": "The partner-provided unique user token associated with this scan.", "example": "unique-user-token" }, "deviceConfigName": { "enum": [ "IPHONE_SCANNER", "ANDROID_SCANNER" ], "type": "string", "description": "The device configuration used to capture this scan.", "example": "IPHONE_SCANNER" }, "assetConfigId": { "type": "string", "format": "uuid", "description": "The asset configuration applied to this scan.\n\nUse this ID to control which assets (models, images, etc.) are generated for the scan.\n\nCommon configurations:\n- Default Native Pipeline: assetConfigId == \"25f6d3a6-a634-40c3-8452-0342bee242d0\"\n- Default Web Pipeline: assetConfigId == \"ee651a9e-6de1-4621-a5c9-5d31ca874718\"\n- Legacy Native Pipeline: assetConfigId == \"c979ab6b-e46b-4c1c-89e1-bb02435b5cbf\"", "example": "25f6d3a6-a634-40c3-8452-0342bee242d0" }, "bodyfatMethod": { "type": "string", "enum": [ "adam", "army", "army_athlete", "coco", "coco_bri", "coco_legacy", "coco2", "coco2_oc", "extended_navy_thinboost", "tina_fit" ], "description": "The body fat method applied to this scan.", "example": "coco" } }, "required": [ "userToken", "deviceConfigName" ] }, "ScanAssetsDto": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique ID of the scan assets", "example": "unique-scan-asset-id" }, "scanId": { "type": "string", "description": "The ID of the scan associated with the assets", "example": "unique-scan-id" }, "captureData": { "type": "string", "nullable": true, "enum": [ "started", "succeeded", "failed" ], "description": "The status of the capture data associated with the scan", "example": "succeeded" }, "captureDataUpdatedAt": { "type": "string", "nullable": true, "description": "The date and time the capture data was last updated" }, "body": { "type": "string", "nullable": true, "enum": [ "started", "succeeded", "failed" ], "description": "The status of the body associated with the scan", "example": "started" }, "bodyUpdatedAt": { "type": "string", "nullable": true, "description": "The date and time the body was last updated" }, "fittedBody": { "type": "string", "nullable": true, "enum": [ "started", "succeeded", "failed" ], "description": "The status of the fitted body associated with the scan", "example": null }, "fittedBodyUpdatedAt": { "type": "string", "nullable": true, "description": "The date and time the fitted body was last updated" }, "measurement": { "type": "string", "nullable": true, "enum": [ "started", "succeeded", "failed" ], "description": "The status of the measurement associated with the scan", "example": null }, "measurementUpdatedAt": { "type": "string", "nullable": true, "description": "The date and time the measurement was last updated" }, "createdAt": { "type": "string", "description": "The date and time the scan assets were created" }, "updatedAt": { "type": "string", "description": "The date and time the scan assets were last updated" } }, "required": [ "id", "scanId", "captureData", "captureDataUpdatedAt", "body", "bodyUpdatedAt", "fittedBodyUpdatedAt", "measurementUpdatedAt", "createdAt", "updatedAt" ] }, "MeasurementDto": { "type": "object", "properties": { "neckFit": { "type": "number" }, "shoulderFit": { "type": "number" }, "upperChestFit": { "type": "number" }, "chestFit": { "type": "number" }, "lowerChestFit": { "type": "number" }, "waistFit": { "type": "number" }, "waistNavyFit": { "type": "number" }, "stomachFit": { "type": "number" }, "hipsFit": { "type": "number" }, "upperThighLeftFit": { "type": "number" }, "upperThighRightFit": { "type": "number" }, "thighLeftFit": { "type": "number" }, "thighRightFit": { "type": "number" }, "lowerThighLeftFit": { "type": "number" }, "lowerThighRightFit": { "type": "number" }, "calfLeftFit": { "type": "number" }, "calfRightFit": { "type": "number" }, "ankleLeftFit": { "type": "number" }, "ankleRightFit": { "type": "number" }, "midArmRightFit": { "type": "number" }, "midArmLeftFit": { "type": "number" }, "lowerArmRightFit": { "type": "number" }, "lowerArmLeftFit": { "type": "number" }, "waistToHipRatio": { "type": "number" }, "forearmLeftFit": { "type": "number" }, "forearmRightFit": { "type": "number" }, "wristLeftFit": { "type": "number" }, "wristRightFit": { "type": "number" }, "bmiPredicted": { "type": "number" }, "bmiConfidence": { "type": "number" }, "bodyRoundnessIndex": { "type": "number" }, "fullBodyVolume": { "type": "number" } }, "required": [ "neckFit", "shoulderFit", "upperChestFit", "chestFit", "lowerChestFit", "waistFit", "waistNavyFit", "stomachFit", "hipsFit", "upperThighLeftFit", "upperThighRightFit", "thighLeftFit", "thighRightFit", "lowerThighLeftFit", "lowerThighRightFit", "calfLeftFit", "calfRightFit", "ankleLeftFit", "ankleRightFit", "midArmRightFit", "midArmLeftFit", "lowerArmRightFit", "lowerArmLeftFit", "waistToHipRatio", "forearmLeftFit", "forearmRightFit", "wristLeftFit", "wristRightFit", "bmiPredicted", "bmiConfidence", "bodyRoundnessIndex", "fullBodyVolume" ] }, "BodyfatDto": { "type": "object", "properties": { "bodyfatMethod": { "type": "string", "enum": [ "adam", "army", "army_athlete", "coco", "coco_bri", "coco_legacy", "coco2", "coco2_oc", "extended_navy_thinboost", "tina_fit" ], "description": "Bodyfat method for the scan", "example": "coco" }, "bodyfatPercentage": { "type": "number", "nullable": true, "description": "Bodyfat percentage", "example": 20 }, "leanMassPercentage": { "type": "number", "nullable": true, "description": "Lean mass percentage", "example": 80 }, "fatMass": { "type": "number", "nullable": true, "description": "fat mass in kg", "example": 16 }, "leanMass": { "type": "number", "nullable": true, "description": "lean mass in kg", "example": 64 }, "vatPercentage": { "type": "number", "nullable": true, "description": "visceral adipose tissue (VAT) in %", "example": 1.5 }, "vatMass": { "type": "number", "nullable": true, "description": "visceral adipose tissue (VAT) in kg", "example": 1.2 }, "appendicularLeanMassPercentage": { "type": "number", "nullable": true, "description": "appendicular lean mass (ALM) in %", "example": 20 }, "appendicularLeanMass": { "type": "number", "nullable": true, "description": "appendicular lean mass (ALM) in kg", "example": 16 }, "skeletalMuscleMassPercentage": { "type": "number", "nullable": true, "description": "skeletal muscle mass (SMM) in %", "example": 20 }, "skeletalMuscleMass": { "type": "number", "nullable": true, "description": "skeletal muscle mass (SMM) in kg", "example": 16 } }, "required": [ "bodyfatMethod", "bodyfatPercentage", "leanMassPercentage", "fatMass", "leanMass", "vatPercentage", "vatMass", "appendicularLeanMassPercentage", "appendicularLeanMass", "skeletalMuscleMassPercentage", "skeletalMuscleMass" ] }, "ScanDto": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique ID of the scan within the Hosted API.", "example": "unique-scan-id" }, "status": { "enum": [ "CREATED", "PROCESSING", "READY", "FAILED" ], "type": "string", "description": "The current processing status of the scan.", "example": "PROCESSING" }, "prismScanId": { "type": "string", "description": "The unique ID of the scan in Prism’s internal systems. Used mainly for debugging and support.", "example": "prism-unique-scan-id" }, "deviceConfigName": { "enum": [ "IPHONE_SCANNER", "ANDROID_SCANNER" ], "type": "string", "description": "The device configuration used to capture this scan.", "example": "IPHONE_SCANNER" }, "assetConfigId": { "type": "string", "description": "The asset configuration applied to this scan.\n\nUse this ID to control which assets (models, images, etc.) are generated for the scan.\n\nCommon configurations:\n- Default Native Pipeline: assetConfigId == \"25f6d3a6-a634-40c3-8452-0342bee242d0\"\n- Default Web Pipeline: assetConfigId == \"ee651a9e-6de1-4621-a5c9-5d31ca874718\"\n- Legacy Native Pipeline: assetConfigId == \"c979ab6b-e46b-4c1c-89e1-bb02435b5cbf\"", "example": "25f6d3a6-a634-40c3-8452-0342bee242d0" }, "weight": { "description": "The user's body weight at the time of the scan.", "example": { "value": 80, "unit": "kg" }, "allOf": [ { "$ref": "#/components/schemas/Weight" } ] }, "height": { "description": "The user's body height.", "example": { "value": 1.8, "unit": "m" }, "allOf": [ { "$ref": "#/components/schemas/Height" } ] }, "userId": { "type": "string", "description": "The unique ID of the user in the Prism Hosted API.", "example": "unique-user-id" }, "userToken": { "type": "string", "description": "The partner-provided unique user token associated with this scan.", "example": "unique-user-token" }, "createdAt": { "type": "string", "description": "The date and time when the scan was created." }, "updatedAt": { "type": "string", "description": "The date and time when the scan was last updated." }, "scanAssets": { "description": "The asset metadata associated with the scan, including generation status of related assets.", "allOf": [ { "$ref": "#/components/schemas/ScanAssetsDto" } ] }, "measurements": { "nullable": true, "type": "object", "allOf": [ { "$ref": "#/components/schemas/MeasurementDto" } ] }, "bodyfat": { "nullable": true, "type": "object", "allOf": [ { "$ref": "#/components/schemas/BodyfatDto" } ] } }, "required": [ "id", "status", "prismScanId", "deviceConfigName", "assetConfigId", "weight", "height", "userId", "userToken", "createdAt", "updatedAt", "measurements", "bodyfat" ] }, "ScanUploadUrlDto": { "type": "object", "properties": { "expirationTime": { "type": "string", "description": "Expiration time of the signed url" }, "url": { "type": "string", "description": "A signed url to upload capture data to prism", "example": "https://signed-url" } }, "required": [ "expirationTime", "url" ] }, "BodyShapePredictionAssetUrlsDto": { "type": "object", "properties": { "bodyShapePrediction": { "type": "string", "nullable": true } }, "required": [ "bodyShapePrediction" ] }, "ScanAssetUrlsDto": { "type": "object", "properties": { "previewImage": { "type": "string", "nullable": true }, "model": { "type": "string", "nullable": true }, "canonicalBody": { "type": "string", "nullable": true }, "texture": { "type": "string", "nullable": true }, "material": { "type": "string", "nullable": true }, "stripes": { "type": "string", "nullable": true }, "captureVideo": { "type": "string", "nullable": true } }, "required": [ "previewImage", "model", "canonicalBody", "texture", "material", "stripes", "captureVideo" ] }, "UpdateBodyfatDto": { "type": "object", "properties": { "bodyfatMethod": { "type": "string", "enum": [ "adam", "army", "army_athlete", "coco", "coco_bri", "coco_legacy", "coco2", "coco2_oc", "extended_navy_thinboost", "tina_fit" ], "description": "A new bodyfat method to to use for the scan", "example": "coco" } }, "required": [ "bodyfatMethod" ] }, "CreateTermsDto": { "type": "object", "properties": { "version": { "type": "string" } } }, "TermsDto": { "type": "object", "properties": { "userId": { "type": "string" }, "userToken": { "type": "string" }, "accepted": { "type": "boolean" }, "version": { "type": "string", "nullable": true }, "acceptanceDate": { "type": "string" } }, "required": [ "userId", "userToken", "accepted", "version", "acceptanceDate" ] }, "HealthReportDto": { "type": "object", "properties": { "scan": { "type": "object" }, "user": { "type": "object" }, "bodyFatPercentageReport": { "type": "object" }, "leanMassReport": { "type": "object" }, "fatMassReport": { "type": "object" }, "waistCircumferenceReport": { "type": "object" }, "waistToHipRatioReport": { "type": "object" }, "waistToHeightRatioReport": { "type": "object" }, "metabolismReport": { "type": "object" }, "metabolicAgeReport": { "type": "object" }, "appendicularLeanMassReport": { "type": "object" }, "skeletalMuscleMassReport": { "type": "object" } }, "required": [ "scan", "user", "bodyFatPercentageReport", "leanMassReport", "fatMassReport", "waistCircumferenceReport", "waistToHipRatioReport", "waistToHeightRatioReport", "metabolismReport", "metabolicAgeReport", "appendicularLeanMassReport", "skeletalMuscleMassReport" ] }, "CreateBodyShapePredictionDto": { "type": "object", "properties": { "scanId": { "type": "string", "description": "The unique ID of the scan within the Hosted API on which the body shape prediction is based.", "example": "unique-scan-id" }, "predictionType": { "type": "string", "enum": [ "weight_loss" ], "description": "The prediction type that should be used for the prediction.", "example": "weight_loss" }, "targetWeight": { "type": "number", "minimum": 1, "description": "The target weight in kg for the prediction. This or targetBodyfat should be specified, but not both.", "example": 50 }, "targetBodyfat": { "type": "number", "minimum": 1, "description": "The target body fat percentage for the prediction. This or targetWeight should be specified, but not both.", "example": 20 } }, "required": [ "scanId", "predictionType" ] }, "BodyShapePredictionDto": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique ID of the body shape prediction.", "example": "unique-body-shape-prediction-id" }, "status": { "enum": [ "CREATED", "PROCESSING", "READY", "FAILED" ], "type": "string", "description": "The current body shape prediction status.", "example": "PROCESSING" }, "scanId": { "type": "string", "description": "The unique ID of the scan within the Hosted API on which the body shape prediction is based.", "example": "unique-scan-id" }, "predictionType": { "type": "string", "enum": [ "weight_loss" ], "description": "The prediction type of the prediction.", "example": "weight_loss" }, "targetWeight": { "type": "number", "nullable": true, "description": "Target body weight for the prediction.", "example": 50 }, "targetBodyfat": { "type": "number", "nullable": true, "description": "Target body fat for the prediction.", "example": 20 }, "createdAt": { "type": "string", "description": "The date and time when the body shape prediction was created." }, "updatedAt": { "type": "string", "description": "The date and time when the body shape prediction was last updated." } }, "required": [ "id", "status", "scanId", "predictionType", "createdAt", "updatedAt" ] } } } }