cancel
Showing results for 
Search instead for 
Did you mean: 
Announcements

The Hub is now in read-only mode as we make improvements to the Hub experience. More information is available here.

API 400 - I don't understand the error

tavise
Mt. Kenya

I'm attempting to upload an Activity to the /uploads endpoint.  (from Java)  I've used the Garmin SDK to generate a Fit stream, and attempting to post.  (The OAuth2 workflow is working fine, I've acquired an access token).  First, the error:

{"message":"Bad Request","errors":[{"resource":"Upload","field":"data","code":"empty"}]}

What I don't understand is that according to the API docs there is no "data" field.

The code (using Jakarta HTTP Client)

          InputStream fitStream = buildFitStream(user, save);

          try (FormDataMultiPart form = new FormDataMultiPart();
            MultiPart entity = form.field("name", "Name")
              .field("description", "Description")
              .field("trainer", "true")
              .field("externalId", metaData.workoutID())
              .field("data_type", "fit")
              .bodyPart(new StreamDataBodyPart("file", fitStream, "row.fit"))) {
            return request.post(Entity.entity(entity, entity.getMediaType()), UploadResponse.class);

 Here is some debugging output from the request:

1 > POST https://www.strava.com/api/v3/uploads
1 > Accept: application/json,text/plain
1 > Authorization: [redacted]
1 > Content-Type: multipart/form-data
--Boundary_3_592165230_1714169487959
Content-Type: text/plain
Content-Disposition: form-data; name="name"

Name
--Boundary_3_592165230_1714169487959
Content-Type: text/plain
Content-Disposition: form-data; name="description"

Description
--Boundary_3_592165230_1714169487959
Content-Type: text/plain
Content-Disposition: form-data; name="trainer"

true
--Boundary_3_592165230_1714169487959
Content-Type: text/plain
Content-Disposition: form-data; name="externalId"

46af4101-6b81-4583-9849-05c9c3c4f8f4
--Boundary_3_592165230_1714169487959
Content-Type: text/plain
Content-Disposition: form-data; name="data_type"

fit
--Boundary_3_592165230_1714169487959
Content-Type: application/octet-stream
Content-Disposition: form-data; filename="row.fit"; name="file"

� z 8@  ��    ���� �
--Boundary_3_592165230_1714169487959--


INFO  [2024-04-26 22:11:28,086] jerseyClientDebug: 1 * Client response received on thread pool-3-thread-21 
1 < 400
1 < Cache-Control: no-cache
1 < Connection: keep-alive
1 < Content-Type: application/json; charset=utf-8
1 < Date: Fri, 26 Apr 2024 22:11:29 GMT
1 < Referrer-Policy: strict-origin-when-cross-origin
1 < Status: 400 Bad Request
1 < Transfer-Encoding: chunked
1 < Vary: Accept, Origin
1 < Via: 1.1 linkerd, 1.1 linkerd, 1.1 e77661e211afe9242e85e573f12d5534.cloudfront.net (CloudFront)
1 < X-Cache: Error from cloudfront
1 < X-Content-Type-Options: nosniff
1 < X-Download-Options: noopen
1 < X-Frame-Options: DENY
1 < X-Permitted-Cross-Domain-Policies: none
1 < X-RateLimit-Limit: 200,2000
1 < X-RateLimit-Usage: 2,16
1 < X-ReadRateLimit-Limit: 100,1000
1 < X-ReadRateLimit-Usage: ,
1 < X-Request-Id: 15206174-8808-4dac-8535-1a39adc1df9d
1 < X-XSS-Protection: 1; mode=block
{"message":"Bad Request","errors":[{"resource":"Upload","field":"data","code":"empty"}]}

 

0 REPLIES 0