@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api AWS Device Farm
@version 2015-06-23
@auth AWS SigV4
@endpoints 77
@hint download_for_search
@toc root(77)

@endpoint POST /
@required {projectArn: str, name: str, rules: [Rule]}
@optional {description: str, maxDevices: int}
@returns(200) {devicePool: DevicePool?{arn: str?, name: str?, description: str?, type: str?, rules: [Rule]?, maxDevices: int?}}

@endpoint POST /
@required {name: str}
@optional {description: str, packageCleanup: bool, excludeAppPackagesFromCleanup: [str], rebootAfterUse: bool}
@returns(200) {instanceProfile: InstanceProfile?{arn: str?, packageCleanup: bool?, excludeAppPackagesFromCleanup: [str]?, rebootAfterUse: bool?, name: str?, description: str?}}

@endpoint POST /
@required {projectArn: str, name: str}
@optional {description: str, type: str, uplinkBandwidthBits: int(i64), downlinkBandwidthBits: int(i64), uplinkDelayMs: int(i64), downlinkDelayMs: int(i64), uplinkJitterMs: int(i64), downlinkJitterMs: int(i64), uplinkLossPercent: int, downlinkLossPercent: int}
@returns(200) {networkProfile: NetworkProfile?{arn: str?, name: str?, description: str?, type: str?, uplinkBandwidthBits: int(i64)?, downlinkBandwidthBits: int(i64)?, uplinkDelayMs: int(i64)?, downlinkDelayMs: int(i64)?, uplinkJitterMs: int(i64)?, downlinkJitterMs: int(i64)?, uplinkLossPercent: int?, downlinkLossPercent: int?}}

@endpoint POST /
@required {name: str}
@optional {defaultJobTimeoutMinutes: int, vpcConfig: VpcConfig}
@returns(200) {project: Project?{arn: str?, name: str?, defaultJobTimeoutMinutes: int?, created: str(timestamp)?, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {projectArn: str, deviceArn: str}
@optional {instanceArn: str, sshPublicKey: str, remoteDebugEnabled: bool, remoteRecordEnabled: bool, remoteRecordAppArn: str, name: str, clientId: str, configuration: CreateRemoteAccessSessionConfiguration, interactionMode: str, skipAppResign: bool}
@returns(200) {remoteAccessSession: RemoteAccessSession?{arn: str?, name: str?, created: str(timestamp)?, status: str?, result: str?, message: str?, started: str(timestamp)?, stopped: str(timestamp)?, device: Device?{arn: str?, name: str?, manufacturer: str?, model: str?, modelId: str?, formFactor: str?, platform: str?, os: str?, cpu: CPU?{frequency: str?, architecture: str?, clock: num(f64)?}, resolution: Resolution?{width: int?, height: int?}, heapSize: int(i64)?, memory: int(i64)?, image: str?, carrier: str?, radio: str?, remoteAccessEnabled: bool?, remoteDebugEnabled: bool?, fleetType: str?, fleetName: str?, instances: [DeviceInstance]?, availability: str?}, instanceArn: str?, remoteDebugEnabled: bool?, remoteRecordEnabled: bool?, remoteRecordAppArn: str?, hostAddress: str?, clientId: str?, billingMethod: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, endpoint: str?, deviceUdid: str?, interactionMode: str?, skipAppResign: bool?, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {name: str}
@optional {description: str, vpcConfig: TestGridVpcConfig}
@returns(200) {testGridProject: TestGridProject?{arn: str?, name: str?, description: str?, vpcConfig: TestGridVpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}, created: str(timestamp)?}}

@endpoint POST /
@required {projectArn: str, expiresInSeconds: int}
@returns(200) {url: str?, expires: str(timestamp)?}

@endpoint POST /
@required {projectArn: str, name: str, type: str}
@optional {contentType: str}
@returns(200) {upload: Upload?{arn: str?, name: str?, created: str(timestamp)?, type: str?, status: str?, url: str?, metadata: str?, contentType: str?, message: str?, category: str?}}

@endpoint POST /
@required {vpceConfigurationName: str, vpceServiceName: str, serviceDnsName: str}
@optional {vpceConfigurationDescription: str}
@returns(200) {vpceConfiguration: VPCEConfiguration?{arn: str?, vpceConfigurationName: str?, vpceServiceName: str?, serviceDnsName: str?, vpceConfigurationDescription: str?}}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@required {projectArn: str}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@required {arn: str}

@endpoint POST /
@returns(200) {accountSettings: AccountSettings?{awsAccountNumber: str?, unmeteredDevices: map<str,int>?, unmeteredRemoteAccessDevices: map<str,int>?, maxJobTimeoutMinutes: int?, trialMinutes: TrialMinutes?{total: num(f64)?, remaining: num(f64)?}, maxSlots: map<str,int>?, defaultJobTimeoutMinutes: int?, skipAppResign: bool?}}

@endpoint POST /
@required {arn: str}
@returns(200) {device: Device?{arn: str?, name: str?, manufacturer: str?, model: str?, modelId: str?, formFactor: str?, platform: str?, os: str?, cpu: CPU?{frequency: str?, architecture: str?, clock: num(f64)?}, resolution: Resolution?{width: int?, height: int?}, heapSize: int(i64)?, memory: int(i64)?, image: str?, carrier: str?, radio: str?, remoteAccessEnabled: bool?, remoteDebugEnabled: bool?, fleetType: str?, fleetName: str?, instances: [DeviceInstance]?, availability: str?}}

@endpoint POST /
@required {arn: str}
@returns(200) {deviceInstance: DeviceInstance?{arn: str?, deviceArn: str?, labels: [str]?, status: str?, udid: str?, instanceProfile: InstanceProfile?{arn: str?, packageCleanup: bool?, excludeAppPackagesFromCleanup: [str]?, rebootAfterUse: bool?, name: str?, description: str?}}}

@endpoint POST /
@required {arn: str}
@returns(200) {devicePool: DevicePool?{arn: str?, name: str?, description: str?, type: str?, rules: [Rule]?, maxDevices: int?}}

@endpoint POST /
@required {devicePoolArn: str}
@optional {appArn: str, testType: str, test: ScheduleRunTest, configuration: ScheduleRunConfiguration}
@returns(200) {compatibleDevices: [DevicePoolCompatibilityResult]?, incompatibleDevices: [DevicePoolCompatibilityResult]?}

@endpoint POST /
@required {arn: str}
@returns(200) {instanceProfile: InstanceProfile?{arn: str?, packageCleanup: bool?, excludeAppPackagesFromCleanup: [str]?, rebootAfterUse: bool?, name: str?, description: str?}}

@endpoint POST /
@required {arn: str}
@returns(200) {job: Job?{arn: str?, name: str?, type: str?, created: str(timestamp)?, status: str?, result: str?, started: str(timestamp)?, stopped: str(timestamp)?, counters: Counters?{total: int?, passed: int?, failed: int?, warned: int?, errored: int?, stopped: int?, skipped: int?}, message: str?, device: Device?{arn: str?, name: str?, manufacturer: str?, model: str?, modelId: str?, formFactor: str?, platform: str?, os: str?, cpu: CPU?{frequency: str?, architecture: str?, clock: num(f64)?}, resolution: Resolution?{width: int?, height: int?}, heapSize: int(i64)?, memory: int(i64)?, image: str?, carrier: str?, radio: str?, remoteAccessEnabled: bool?, remoteDebugEnabled: bool?, fleetType: str?, fleetName: str?, instances: [DeviceInstance]?, availability: str?}, instanceArn: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, videoEndpoint: str?, videoCapture: bool?}}

@endpoint POST /
@required {arn: str}
@returns(200) {networkProfile: NetworkProfile?{arn: str?, name: str?, description: str?, type: str?, uplinkBandwidthBits: int(i64)?, downlinkBandwidthBits: int(i64)?, uplinkDelayMs: int(i64)?, downlinkDelayMs: int(i64)?, uplinkJitterMs: int(i64)?, downlinkJitterMs: int(i64)?, uplinkLossPercent: int?, downlinkLossPercent: int?}}

@endpoint POST /
@optional {nextToken: str}
@returns(200) {current: map<str,OfferingStatus>?, nextPeriod: map<str,OfferingStatus>?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@returns(200) {project: Project?{arn: str?, name: str?, defaultJobTimeoutMinutes: int?, created: str(timestamp)?, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {arn: str}
@returns(200) {remoteAccessSession: RemoteAccessSession?{arn: str?, name: str?, created: str(timestamp)?, status: str?, result: str?, message: str?, started: str(timestamp)?, stopped: str(timestamp)?, device: Device?{arn: str?, name: str?, manufacturer: str?, model: str?, modelId: str?, formFactor: str?, platform: str?, os: str?, cpu: CPU?{frequency: str?, architecture: str?, clock: num(f64)?}, resolution: Resolution?{width: int?, height: int?}, heapSize: int(i64)?, memory: int(i64)?, image: str?, carrier: str?, radio: str?, remoteAccessEnabled: bool?, remoteDebugEnabled: bool?, fleetType: str?, fleetName: str?, instances: [DeviceInstance]?, availability: str?}, instanceArn: str?, remoteDebugEnabled: bool?, remoteRecordEnabled: bool?, remoteRecordAppArn: str?, hostAddress: str?, clientId: str?, billingMethod: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, endpoint: str?, deviceUdid: str?, interactionMode: str?, skipAppResign: bool?, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {arn: str}
@returns(200) {run: Run?{arn: str?, name: str?, type: str?, platform: str?, created: str(timestamp)?, status: str?, result: str?, started: str(timestamp)?, stopped: str(timestamp)?, counters: Counters?{total: int?, passed: int?, failed: int?, warned: int?, errored: int?, stopped: int?, skipped: int?}, message: str?, totalJobs: int?, completedJobs: int?, billingMethod: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, networkProfile: NetworkProfile?{arn: str?, name: str?, description: str?, type: str?, uplinkBandwidthBits: int(i64)?, downlinkBandwidthBits: int(i64)?, uplinkDelayMs: int(i64)?, downlinkDelayMs: int(i64)?, uplinkJitterMs: int(i64)?, downlinkJitterMs: int(i64)?, uplinkLossPercent: int?, downlinkLossPercent: int?}, parsingResultUrl: str?, resultCode: str?, seed: int?, appUpload: str?, eventCount: int?, jobTimeoutMinutes: int?, devicePoolArn: str?, locale: str?, radios: Radios?{wifi: bool?, bluetooth: bool?, nfc: bool?, gps: bool?}, location: Location?{latitude: num(f64), longitude: num(f64)}, customerArtifactPaths: CustomerArtifactPaths?{iosPaths: [str]?, androidPaths: [str]?, deviceHostPaths: [str]?}, webUrl: str?, skipAppResign: bool?, testSpecArn: str?, deviceSelectionResult: DeviceSelectionResult?{filters: [DeviceFilter]?, matchedDevicesCount: int?, maxDevices: int?}, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {arn: str}
@returns(200) {suite: Suite?{arn: str?, name: str?, type: str?, created: str(timestamp)?, status: str?, result: str?, started: str(timestamp)?, stopped: str(timestamp)?, counters: Counters?{total: int?, passed: int?, failed: int?, warned: int?, errored: int?, stopped: int?, skipped: int?}, message: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}}}

@endpoint POST /
@required {arn: str}
@returns(200) {test: Test?{arn: str?, name: str?, type: str?, created: str(timestamp)?, status: str?, result: str?, started: str(timestamp)?, stopped: str(timestamp)?, counters: Counters?{total: int?, passed: int?, failed: int?, warned: int?, errored: int?, stopped: int?, skipped: int?}, message: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}}}

@endpoint POST /
@required {projectArn: str}
@returns(200) {testGridProject: TestGridProject?{arn: str?, name: str?, description: str?, vpcConfig: TestGridVpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}, created: str(timestamp)?}}

@endpoint POST /
@optional {projectArn: str, sessionId: str, sessionArn: str}
@returns(200) {testGridSession: TestGridSession?{arn: str?, status: str?, created: str(timestamp)?, ended: str(timestamp)?, billingMinutes: num(f64)?, seleniumProperties: str?}}

@endpoint POST /
@required {arn: str}
@returns(200) {upload: Upload?{arn: str?, name: str?, created: str(timestamp)?, type: str?, status: str?, url: str?, metadata: str?, contentType: str?, message: str?, category: str?}}

@endpoint POST /
@required {arn: str}
@returns(200) {vpceConfiguration: VPCEConfiguration?{arn: str?, vpceConfigurationName: str?, vpceServiceName: str?, serviceDnsName: str?, vpceConfigurationDescription: str?}}

@endpoint POST /
@required {remoteAccessSessionArn: str, appArn: str}
@returns(200) {appUpload: Upload?{arn: str?, name: str?, created: str(timestamp)?, type: str?, status: str?, url: str?, metadata: str?, contentType: str?, message: str?, category: str?}}

@endpoint POST /
@required {arn: str, type: str}
@optional {nextToken: str}
@returns(200) {artifacts: [Artifact]?, nextToken: str?}

@endpoint POST /
@optional {maxResults: int, nextToken: str}
@returns(200) {deviceInstances: [DeviceInstance]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {type: str, nextToken: str}
@returns(200) {devicePools: [DevicePool]?, nextToken: str?}

@endpoint POST /
@optional {arn: str, nextToken: str, filters: [DeviceFilter]}
@returns(200) {devices: [Device]?, nextToken: str?}

@endpoint POST /
@optional {maxResults: int, nextToken: str}
@returns(200) {instanceProfiles: [InstanceProfile]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {nextToken: str}
@returns(200) {jobs: [Job]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {type: str, nextToken: str}
@returns(200) {networkProfiles: [NetworkProfile]?, nextToken: str?}

@endpoint POST /
@optional {nextToken: str}
@returns(200) {offeringPromotions: [OfferingPromotion]?, nextToken: str?}

@endpoint POST /
@optional {nextToken: str}
@returns(200) {offeringTransactions: [OfferingTransaction]?, nextToken: str?}

@endpoint POST /
@optional {nextToken: str}
@returns(200) {offerings: [Offering]?, nextToken: str?}

@endpoint POST /
@optional {arn: str, nextToken: str}
@returns(200) {projects: [Project]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {nextToken: str}
@returns(200) {remoteAccessSessions: [RemoteAccessSession]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {nextToken: str}
@returns(200) {runs: [Run]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {nextToken: str}
@returns(200) {samples: [Sample]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {nextToken: str}
@returns(200) {suites: [Suite]?, nextToken: str?}

@endpoint POST /
@required {ResourceARN: str}
@returns(200) {Tags: [Tag]?}

@endpoint POST /
@optional {maxResult: int, nextToken: str}
@returns(200) {testGridProjects: [TestGridProject]?, nextToken: str?}

@endpoint POST /
@required {sessionArn: str}
@optional {maxResult: int, nextToken: str}
@returns(200) {actions: [TestGridSessionAction]?, nextToken: str?}

@endpoint POST /
@required {sessionArn: str}
@optional {type: str, maxResult: int, nextToken: str}
@returns(200) {artifacts: [TestGridSessionArtifact]?, nextToken: str?}

@endpoint POST /
@required {projectArn: str}
@optional {status: str, creationTimeAfter: str(timestamp), creationTimeBefore: str(timestamp), endTimeAfter: str(timestamp), endTimeBefore: str(timestamp), maxResult: int, nextToken: str}
@returns(200) {testGridSessions: [TestGridSession]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {nextToken: str}
@returns(200) {tests: [Test]?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {nextToken: str}
@returns(200) {uniqueProblems: map<str,[UniqueProblem]>?, nextToken: str?}

@endpoint POST /
@required {arn: str}
@optional {type: str, nextToken: str}
@returns(200) {uploads: [Upload]?, nextToken: str?}

@endpoint POST /
@optional {maxResults: int, nextToken: str}
@returns(200) {vpceConfigurations: [VPCEConfiguration]?, nextToken: str?}

@endpoint POST /
@required {offeringId: str, quantity: int}
@optional {offeringPromotionId: str}
@returns(200) {offeringTransaction: OfferingTransaction?{offeringStatus: OfferingStatus?{type: str?, offering: Offering?{id: str?, description: str?, type: str?, platform: str?, recurringCharges: [RecurringCharge]?}, quantity: int?, effectiveOn: str(timestamp)?}, transactionId: str?, offeringPromotionId: str?, createdOn: str(timestamp)?, cost: MonetaryAmount?{amount: num(f64)?, currencyCode: str?}}}

@endpoint POST /
@required {offeringId: str, quantity: int}
@returns(200) {offeringTransaction: OfferingTransaction?{offeringStatus: OfferingStatus?{type: str?, offering: Offering?{id: str?, description: str?, type: str?, platform: str?, recurringCharges: [RecurringCharge]?}, quantity: int?, effectiveOn: str(timestamp)?}, transactionId: str?, offeringPromotionId: str?, createdOn: str(timestamp)?, cost: MonetaryAmount?{amount: num(f64)?, currencyCode: str?}}}

@endpoint POST /
@required {projectArn: str, test: ScheduleRunTest}
@optional {appArn: str, devicePoolArn: str, deviceSelectionConfiguration: DeviceSelectionConfiguration, name: str, configuration: ScheduleRunConfiguration, executionConfiguration: ExecutionConfiguration}
@returns(200) {run: Run?{arn: str?, name: str?, type: str?, platform: str?, created: str(timestamp)?, status: str?, result: str?, started: str(timestamp)?, stopped: str(timestamp)?, counters: Counters?{total: int?, passed: int?, failed: int?, warned: int?, errored: int?, stopped: int?, skipped: int?}, message: str?, totalJobs: int?, completedJobs: int?, billingMethod: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, networkProfile: NetworkProfile?{arn: str?, name: str?, description: str?, type: str?, uplinkBandwidthBits: int(i64)?, downlinkBandwidthBits: int(i64)?, uplinkDelayMs: int(i64)?, downlinkDelayMs: int(i64)?, uplinkJitterMs: int(i64)?, downlinkJitterMs: int(i64)?, uplinkLossPercent: int?, downlinkLossPercent: int?}, parsingResultUrl: str?, resultCode: str?, seed: int?, appUpload: str?, eventCount: int?, jobTimeoutMinutes: int?, devicePoolArn: str?, locale: str?, radios: Radios?{wifi: bool?, bluetooth: bool?, nfc: bool?, gps: bool?}, location: Location?{latitude: num(f64), longitude: num(f64)}, customerArtifactPaths: CustomerArtifactPaths?{iosPaths: [str]?, androidPaths: [str]?, deviceHostPaths: [str]?}, webUrl: str?, skipAppResign: bool?, testSpecArn: str?, deviceSelectionResult: DeviceSelectionResult?{filters: [DeviceFilter]?, matchedDevicesCount: int?, maxDevices: int?}, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {arn: str}
@returns(200) {job: Job?{arn: str?, name: str?, type: str?, created: str(timestamp)?, status: str?, result: str?, started: str(timestamp)?, stopped: str(timestamp)?, counters: Counters?{total: int?, passed: int?, failed: int?, warned: int?, errored: int?, stopped: int?, skipped: int?}, message: str?, device: Device?{arn: str?, name: str?, manufacturer: str?, model: str?, modelId: str?, formFactor: str?, platform: str?, os: str?, cpu: CPU?{frequency: str?, architecture: str?, clock: num(f64)?}, resolution: Resolution?{width: int?, height: int?}, heapSize: int(i64)?, memory: int(i64)?, image: str?, carrier: str?, radio: str?, remoteAccessEnabled: bool?, remoteDebugEnabled: bool?, fleetType: str?, fleetName: str?, instances: [DeviceInstance]?, availability: str?}, instanceArn: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, videoEndpoint: str?, videoCapture: bool?}}

@endpoint POST /
@required {arn: str}
@returns(200) {remoteAccessSession: RemoteAccessSession?{arn: str?, name: str?, created: str(timestamp)?, status: str?, result: str?, message: str?, started: str(timestamp)?, stopped: str(timestamp)?, device: Device?{arn: str?, name: str?, manufacturer: str?, model: str?, modelId: str?, formFactor: str?, platform: str?, os: str?, cpu: CPU?{frequency: str?, architecture: str?, clock: num(f64)?}, resolution: Resolution?{width: int?, height: int?}, heapSize: int(i64)?, memory: int(i64)?, image: str?, carrier: str?, radio: str?, remoteAccessEnabled: bool?, remoteDebugEnabled: bool?, fleetType: str?, fleetName: str?, instances: [DeviceInstance]?, availability: str?}, instanceArn: str?, remoteDebugEnabled: bool?, remoteRecordEnabled: bool?, remoteRecordAppArn: str?, hostAddress: str?, clientId: str?, billingMethod: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, endpoint: str?, deviceUdid: str?, interactionMode: str?, skipAppResign: bool?, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {arn: str}
@returns(200) {run: Run?{arn: str?, name: str?, type: str?, platform: str?, created: str(timestamp)?, status: str?, result: str?, started: str(timestamp)?, stopped: str(timestamp)?, counters: Counters?{total: int?, passed: int?, failed: int?, warned: int?, errored: int?, stopped: int?, skipped: int?}, message: str?, totalJobs: int?, completedJobs: int?, billingMethod: str?, deviceMinutes: DeviceMinutes?{total: num(f64)?, metered: num(f64)?, unmetered: num(f64)?}, networkProfile: NetworkProfile?{arn: str?, name: str?, description: str?, type: str?, uplinkBandwidthBits: int(i64)?, downlinkBandwidthBits: int(i64)?, uplinkDelayMs: int(i64)?, downlinkDelayMs: int(i64)?, uplinkJitterMs: int(i64)?, downlinkJitterMs: int(i64)?, uplinkLossPercent: int?, downlinkLossPercent: int?}, parsingResultUrl: str?, resultCode: str?, seed: int?, appUpload: str?, eventCount: int?, jobTimeoutMinutes: int?, devicePoolArn: str?, locale: str?, radios: Radios?{wifi: bool?, bluetooth: bool?, nfc: bool?, gps: bool?}, location: Location?{latitude: num(f64), longitude: num(f64)}, customerArtifactPaths: CustomerArtifactPaths?{iosPaths: [str]?, androidPaths: [str]?, deviceHostPaths: [str]?}, webUrl: str?, skipAppResign: bool?, testSpecArn: str?, deviceSelectionResult: DeviceSelectionResult?{filters: [DeviceFilter]?, matchedDevicesCount: int?, maxDevices: int?}, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {ResourceARN: str, Tags: [Tag]}

@endpoint POST /
@required {ResourceARN: str, TagKeys: [str]}

@endpoint POST /
@required {arn: str}
@optional {profileArn: str, labels: [str]}
@returns(200) {deviceInstance: DeviceInstance?{arn: str?, deviceArn: str?, labels: [str]?, status: str?, udid: str?, instanceProfile: InstanceProfile?{arn: str?, packageCleanup: bool?, excludeAppPackagesFromCleanup: [str]?, rebootAfterUse: bool?, name: str?, description: str?}}}

@endpoint POST /
@required {arn: str}
@optional {name: str, description: str, rules: [Rule], maxDevices: int, clearMaxDevices: bool}
@returns(200) {devicePool: DevicePool?{arn: str?, name: str?, description: str?, type: str?, rules: [Rule]?, maxDevices: int?}}

@endpoint POST /
@required {arn: str}
@optional {name: str, description: str, packageCleanup: bool, excludeAppPackagesFromCleanup: [str], rebootAfterUse: bool}
@returns(200) {instanceProfile: InstanceProfile?{arn: str?, packageCleanup: bool?, excludeAppPackagesFromCleanup: [str]?, rebootAfterUse: bool?, name: str?, description: str?}}

@endpoint POST /
@required {arn: str}
@optional {name: str, description: str, type: str, uplinkBandwidthBits: int(i64), downlinkBandwidthBits: int(i64), uplinkDelayMs: int(i64), downlinkDelayMs: int(i64), uplinkJitterMs: int(i64), downlinkJitterMs: int(i64), uplinkLossPercent: int, downlinkLossPercent: int}
@returns(200) {networkProfile: NetworkProfile?{arn: str?, name: str?, description: str?, type: str?, uplinkBandwidthBits: int(i64)?, downlinkBandwidthBits: int(i64)?, uplinkDelayMs: int(i64)?, downlinkDelayMs: int(i64)?, uplinkJitterMs: int(i64)?, downlinkJitterMs: int(i64)?, uplinkLossPercent: int?, downlinkLossPercent: int?}}

@endpoint POST /
@required {arn: str}
@optional {name: str, defaultJobTimeoutMinutes: int, vpcConfig: VpcConfig}
@returns(200) {project: Project?{arn: str?, name: str?, defaultJobTimeoutMinutes: int?, created: str(timestamp)?, vpcConfig: VpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}}}

@endpoint POST /
@required {projectArn: str}
@optional {name: str, description: str, vpcConfig: TestGridVpcConfig}
@returns(200) {testGridProject: TestGridProject?{arn: str?, name: str?, description: str?, vpcConfig: TestGridVpcConfig?{securityGroupIds: [str], subnetIds: [str], vpcId: str}, created: str(timestamp)?}}

@endpoint POST /
@required {arn: str}
@optional {name: str, contentType: str, editContent: bool}
@returns(200) {upload: Upload?{arn: str?, name: str?, created: str(timestamp)?, type: str?, status: str?, url: str?, metadata: str?, contentType: str?, message: str?, category: str?}}

@endpoint POST /
@required {arn: str}
@optional {vpceConfigurationName: str, vpceServiceName: str, serviceDnsName: str, vpceConfigurationDescription: str}
@returns(200) {vpceConfiguration: VPCEConfiguration?{arn: str?, vpceConfigurationName: str?, vpceServiceName: str?, serviceDnsName: str?, vpceConfigurationDescription: str?}}

@end
