GET/api/v4/locations/photos/requests/{requestId}

Check bulk photo upload status

Returns the current processing status for a bulk photo upload request.

Requires an API key. See Authentication for header format and key rotation.

Parameters

Path

NameTypeRequiredDescription
requestIdstringrequiredUUID request ID returned in the `request` object by the add-photos endpoint when it queues a batch instead of uploading it inline.

Responses

200Current status of the bulk upload request, with per-photo results once available.
Response
{  "data": {    "getLocationPhotosUploadStatus": {      "requestId": "e6c2d9d9-9a18-4015-88cf-9a4e19a6f49a",      "status": "SUCCESS",      "photos": [        {          "mediaId": "TWVkaWFGaWxlOjkxODI3",          "locationId": "TG9jYXRpb246MTgwMDI4OQ==",          "status": "SUCCESS",          "errorMessage": null        },        {          "mediaId": null,          "locationId": "TG9jYXRpb246MTgwMDI4OQ==",          "status": "ERROR",          "errorMessage": "Image dimensions below the minimum 250x250."        }      ]    }  }}
401Unauthenticated, missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.

Polls the status of an asynchronous bulk photo upload. When a batch is large enough, add location photos processes it in the background and returns a requestId in the request object instead of the finished media. The batch size that triggers this is server-side configuration rather than a published constant, so decide which path you are on by checking whether request.requestId came back, not by counting your own images. Poll this endpoint with that requestId until the job settles.

Use case: drive an upload progress bar. After a large batch upload, poll every few seconds while status is PROCESSING. Once it flips to SUCCESS or ERROR, read the photos array for the per-image outcome: each entry carries the resulting mediaId (on success) plus a status/errorMessage pair so you can show exactly which files were rejected and why (wrong dimensions, unsupported format, etc.) rather than failing the whole batch.

Status values: PROCESSING (still working: poll again), SUCCESS (the job finished processing), ERROR (the job itself failed; inspect photos[].errorMessage).

The job status reports only that processing finished, not that every image succeeded. A SUCCESS job can still contain rejected photos, as in the sample above. Once the job leaves PROCESSING, walk photos[] and read each entry's own status and errorMessage to find out which images landed.

Polling gotcha: back off between polls: a tight loop against this endpoint is a fast way to hit 429. Honor the Retry-After header and prefer an interval of a few seconds. An unknown or expired requestId will not resolve, so only poll IDs handed back by a recent upload call.

Request
curl -X GET 'https://listingsapi.com/api/v4/locations/photos/requests/<requestId>' \  -H "Authorization: API $LISTINGSAPI_KEY"