# Push

***

## Upload a distributed app

> Upload a distributed app to the server

```json
{"openapi":"3.1.1","info":{"title":"ByteNite developers API","version":"0.1"},"tags":[],"servers":[{"url":"https://api.bytenite.com/v1/dev"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","description":"Your ByteNite access token","name":"Authorization","in":"header"}},"schemas":{"appApp":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier assigned to the distributed app (UUID).","readOnly":true},"name":{"type":"string","description":"Human-readable name of the app."},"version":{"type":"string","title":"App version"},"owner":{"type":"string","description":"UUID of the user who owns the app."},"status":{"type":"string","description":"Status of the app, e.g., active, inactive."},"deviceRequirements":{"$ref":"#/components/schemas/commonDeviceRequirements","title":"Device requirements for running the app"},"isPublic":{"type":"boolean","description":"Indicates whether the app is publicly accessible."},"createdAt":{"type":"string","format":"date-time","description":"UTC timestamp when the app was created.","readOnly":true},"updatedAt":{"type":"string","format":"date-time","description":"UTC timestamp when the app was last updated.","readOnly":true},"platform":{"type":"string","description":"Target platform for app execution (e.g., docker)."},"hash":{"type":"string","description":"SHA256 checksum of the uploaded tar archive.","readOnly":true},"link":{"type":"string","description":"Currently contains the link to the app's source code."},"platformConfig":{"$ref":"#/components/schemas/commonPlatformConfig","title":"Platform-specific configuration"},"entrypoint":{"type":"string","description":"Main executable file or script to launch the application (e.g., main.py)."},"revision":{"type":"string","format":"int64","description":"Internal revision tracking number.","readOnly":true},"description":{"type":"string","description":"Optional free-form description of the app."},"userName":{"type":"string","description":"User name of the app owner."}},"description":"Each bytenite job is tagged to an app which describes the type of job being run."},"commonDeviceRequirements":{"type":"object","properties":{"minCpu":{"type":"number","format":"float","description":"Minimum number of vCPUs required to run the app/engine."},"minMemory":{"type":"number","format":"float","description":"Minimum amount of RAM (GB) required to run the app."},"gpu":{"type":"array","items":{"type":"string"},"description":"Array of GPU models requested to run the app/engine, in order of preference. Use the official GPU identifiers provided by the /wallet/rates endpoint. Leave blank if no GPU is required."}},"description":"DeviceRequirements represents the minimum hardware requirements for running the app/engine."},"commonPlatformConfig":{"type":"object","properties":{"container":{"type":"string","description":"Container image identifier."},"privateImage":{"type":"boolean","description":"Indicates if the container image is from a private registry."},"username":{"type":"string","description":"Username for accessing a private container registry (if applicable)."},"token":{"type":"string","description":"Authentication token for accessing a private container registry (if applicable)."},"secrets":{"type":"array","items":{"type":"string"},"description":"List of secret names to be injected into the container as environment variables."}},"title":"PlatformConfig represents configuration for a platform"},"rpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"}}}},"protobufAny":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"developerUploadAppRequest":{"type":"object","properties":{"data":{"type":"string","description":"Base64-encoded tar archive containing application code, configuration, and dependencies.","contentEncoding":"base64"}},"required":["data"]}}},"paths":{"/apps":{"post":{"summary":"Upload a distributed app","description":"Upload a distributed app to the server","operationId":"Developer_UploadApp","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/appApp"}},"application/x-protobuf":{"schema":{"$ref":"#/components/schemas/appApp"}}}},"400":{"description":"Returned when the users sends a malformed request.","content":{"application/json":{"schema":{}},"application/x-protobuf":{"schema":{}}}},"401":{"description":"Returned when the user is not authenticated.","content":{"application/json":{"schema":{}},"application/x-protobuf":{"schema":{}}}},"403":{"description":"Returned when the user does not have permission to access the resource.","content":{"application/json":{"schema":{}},"application/x-protobuf":{"schema":{}}}},"404":{"description":"Returned when the resource does not exist.","content":{"application/json":{"schema":{}},"application/x-protobuf":{"schema":{}}}},"500":{"description":"Returned when an error on the server occurred.","content":{"application/json":{"schema":{}},"application/x-protobuf":{"schema":{}}}},"503":{"description":"Returned when the resource is temporarily unavailable.","content":{"application/json":{"schema":{}},"application/x-protobuf":{"schema":{}}}},"default":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcStatus"}},"application/x-protobuf":{"schema":{"$ref":"#/components/schemas/rpcStatus"}}}}},"tags":["apps"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/developerUploadAppRequest"}},"application/x-protobuf":{"schema":{"$ref":"#/components/schemas/developerUploadAppRequest"}}},"required":true}}}}}
```
