Appearance
Get sync batch status
GET /api/v2/external/patents/sync/{importId}Authentication: x-api-key header, with the patents:write scope. See Authentication and limits.
Poll a batch: status, live counters, and one page of per-item outcomes (?currentPage=&itemsPerPage=, page size capped at 100, POST-body order).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
importId | string | Yes | The importId returned by the sync POST. |
Response
200 The batch with a page of per-item outcomes.
json
{
"object": "patentSyncBatch",
"importId": "2e7a9c40-5b1d-4f8e-9a3c-6d0e1f2a3b4c",
"status": "TRIAGED",
"mode": "ASYNC",
"totalItems": 250,
"processedItems": 250,
"autoAppliedItems": 180,
"stagedItems": 60,
"rejectedItems": 8,
"suppressedItems": 2,
"createdAt": "2026-08-07T06:10:00.000Z",
"completedAt": "2026-08-07T06:12:41.000Z",
"results": {
"pagination": {
"totalItems": 250,
"currentPage": 1,
"itemsPerPage": 100,
"totalPages": 3,
"hasMore": true
},
"data": [
{
"providerId": "ACME-2021-0042",
"renewrPatentId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"action": "UPDATE",
"outcome": "APPLIED",
"requestId": "f87cb600-908d-4e00-ab57-4600cf7cfe00",
"reason": null
},
{
"providerId": "ACME-2019-0007",
"renewrPatentId": "4ffdaa00-d4cd-4200-aa03-5a0084d98200",
"action": "CREATE",
"outcome": "ACCEPTED",
"requestId": "787f2500-a968-4100-a11c-cc00876b0c00",
"reason": null
},
{
"providerId": null,
"renewrPatentId": null,
"action": null,
"outcome": "REJECTED",
"requestId": "c98f6400-da85-4400-a4ac-a4004f7a0400",
"reason": "no identity provided (providerId / renewrPatentId both absent)"
}
]
}
}Response fields
| Field | Type | Description |
|---|---|---|
object | string | String describing the object type (auto-description). One of: patentSyncBatch. |
importId | string | Id of the import batch, the handle for the status endpoint. Format: uuid. |
status | string | PENDING and PROCESSING: the batch is still being processed. TRIAGED: every item has an outcome, at least one awaits review. SETTLED: nothing left to wait on. ERROR: at least one item could not be recorded; contact support with the importId. One of: PENDING, PROCESSING, TRIAGED, SETTLED, ERROR. |
mode | string | SYNC (processed inline) or ASYNC (processed in the background). One of: SYNC, ASYNC. |
totalItems | integer | Number of items in the batch. |
processedItems | integer | Items processed so far, whatever their outcome. |
autoAppliedItems | integer | Items applied automatically (no critical field touched). |
stagedItems | integer | Items staged for review. Counted at triage; the counter does not decrease when decisions are made. |
rejectedItems | integer | Items rejected as invalid. |
suppressedItems | integer | Identical re-pushes of previously refused proposals. |
createdAt | string or null | When the batch was received. Format: date-time. |
completedAt | string or null | When the batch finished processing (null while PENDING or PROCESSING). Format: date-time. |
results | object | Per-item outcomes in POST-body order, as the standard v2 list envelope. The GET paginates them (?currentPage=&itemsPerPage=, page size capped at 100); the POST answers with the first page (all outcomes of an inline batch, empty while an async batch is pending). |
results.pagination | object | Pagination metadata. |
results.pagination.totalItems | integer | Total number of items across all pages. |
results.pagination.currentPage | integer | 1-based index of the current page. |
results.pagination.itemsPerPage | integer | Number of items per page (server cap: 100). |
results.pagination.totalPages | integer | Total number of pages. |
results.pagination.hasMore | boolean | True when another page exists after the current one. |
results.data | array of objects | Page of results. |
results.data[].providerId | string or null | The providerId of the item, echoed back (null when the item did not carry one). |
results.data[].renewrPatentId | string or null | Renewr UUID of the target patent. Null when no patent is attached yet: rejected before matching, or a create still awaiting review (an accepted create carries the UUID of the new patent on later polls). |
results.data[].action | string or null | CREATE | UPDATE (null when rejected pre-match). One of: CREATE, UPDATE. |
results.data[].outcome | string | One of: APPLIED, ACCEPTED, STAGED, SUPPRESSED, REJECTED. |
results.data[].requestId | string or null | Stable id of the change request recorded for this item; quote it in support requests (null only when the item could not be recorded). Format: uuid. |
results.data[].reason | string or null | Why the item was rejected or suppressed; for a proposal refused during review, the reviewer reason verbatim (null otherwise). |
Errors
Errors use the application/problem+json envelope with stable machine-readable codes. See the Errors guide.
| Status | Description |
|---|---|
| 400 | Validation failed (validation_failed): carries per-field errors[] with RFC 6901 JSON Pointers. |
| 401 | Missing or invalid API key (invalid_api_key), or expired key (api_key_expired). |
| 403 | API key lacks the required scope (insufficient_scope, with requiredScope extension) or the operation is not enabled for this client (forbidden). |
| 404 | The resource does not exist in your portfolio (not_found). |
| 429 | Daily API call limit exceeded (rate_limit_exceeded): the Retry-After header gives the seconds until reset. |
Example request
bash
curl "https://api.renewr.example/api/v2/external/patents/sync/$IMPORT_ID?currentPage=1&itemsPerPage=100" \
-H "x-api-key: $RENEWR_API_KEY"