{"info":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","description":"<html><head></head><body><h1 id=\"overview\">Overview</h1>\n<p>Welcome to the Revivn API documentation! This documentation will cover the basics of authenticating with the Revivn API and usage of the available routes.</p>\n<h1 id=\"getting-started\">Getting Started</h1>\n<p><a href=\"https://revivn.app\">Login to the Revivn App</a> and generate OAuth2 credentials from the API section:</p>\n<img src=\"https://content.pstmn.io/90a67558-29af-45e5-b52d-3a6009d86326/aW1hZ2UucG5n\" alt=\"API%20->%20Credentials%20->%20Create%20Application\" width=\"720\" height=\"434\">\n\n<p>Make an OAuth2 client_credentials POST request to obtain an access token:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">  $ curl --request POST --url 'https://api.revivn.dev/oauth/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id=client_id' --data-urlencode 'client_secret=client_secret' --verbose\n\n</code></pre>\n<p>The response should look like this:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\"access_token\":\"uSeGV7Ukqi2w9JSbDP_9OxsssseZsUWSQUcyssset7w\",\"token_type\":\"Bearer\",\"expires_in\":5184000,\"scope\":\"read write\",\"created_at\":1686608864}\n\n</code></pre>\n<p>Pass this token as a header in all of your requests to the below endpoints in the below format:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">Authorizaton: Bearer &lt;access_token&gt;\n\n</code></pre>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Overview","slug":"overview"},{"content":"Getting Started","slug":"getting-started"}],"owner":"23222891","collectionId":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","publishedId":"2s935sohZ4","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-10-21T15:38:01.000Z"},"item":[{"name":"api/v1","item":[{"name":"assets","item":[{"name":":asset_id","item":[{"name":"Show asset","id":"6a86b95f-1dc7-463a-9a34-feda7e8615dc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/assets/:asset_id","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","assets",":asset_id"],"host":["https://api.revivn.dev"],"query":[],"variable":[{"type":"any","value":"","key":"asset_id"}]}},"response":[],"_postman_id":"6a86b95f-1dc7-463a-9a34-feda7e8615dc"},{"name":"Update asset","id":"f07d2441-1b75-4c3d-9121-dc158852a58b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n  \"asset\": {\n    \"lock_codes\": [\n      \"bioslockcode123!\",\n      \"alternatebioslockcode123!\"\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/assets/:asset_id","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","assets",":asset_id"],"host":["https://api.revivn.dev"],"query":[],"variable":[{"type":"any","value":"","key":"asset_id"}]}},"response":[],"_postman_id":"f07d2441-1b75-4c3d-9121-dc158852a58b"}],"id":"e586456c-39f9-4d24-b2e6-7ce4fd4207f8","_postman_id":"e586456c-39f9-4d24-b2e6-7ce4fd4207f8","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}},{"name":"List assets","id":"a3826ce6-441f-4a22-b57a-5a688765adc0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/assets?page[number]=1&page[size]=25&filter[]=","description":"<h1 id=\"list-assets\">List Assets</h1>\n<p>Returns a paginated collection of assets.</p>\n<h2 id=\"asset-variables\">Asset variables</h2>\n<p>List of variables that appear in each asset object:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>asset</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>asset_tag</td>\n</tr>\n<tr>\n<td>cod_url</td>\n</tr>\n<tr>\n<td>cosmetic_condition</td>\n</tr>\n<tr>\n<td>cpu</td>\n</tr>\n<tr>\n<td>data_sanitization</td>\n</tr>\n<tr>\n<td>device_type</td>\n</tr>\n<tr>\n<td>end_of_life_condition</td>\n</tr>\n<tr>\n<td>enrolled_status</td>\n</tr>\n<tr>\n<td>functionality_faults</td>\n</tr>\n<tr>\n<td>hard_drive</td>\n</tr>\n<tr>\n<td>id</td>\n</tr>\n<tr>\n<td>lock_codes</td>\n</tr>\n<tr>\n<td>manufacturer</td>\n</tr>\n<tr>\n<td>model</td>\n</tr>\n<tr>\n<td>normalized_enrolled_status</td>\n</tr>\n<tr>\n<td>pickup_id</td>\n</tr>\n<tr>\n<td>ram</td>\n</tr>\n<tr>\n<td>retired_at</td>\n</tr>\n<tr>\n<td>security_level</td>\n</tr>\n<tr>\n<td>serial_number</td>\n</tr>\n<tr>\n<td>year</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"metadata\">Metadata</h2>\n<p>Included in the response is a <code>meta</code> object with page and count information:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>value</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>total_pages</td>\n<td>number</td>\n</tr>\n<tr>\n<td>count</td>\n<td>number</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"parameters\">Parameters</h2>\n<h3 id=\"filtering\">Filtering</h3>\n<p>A filter can be built using a <strong>field</strong>, <strong>operator</strong>, and a <strong>value</strong>: <code>filter[]=field,operator,value</code>. Repeat <code>filter[]</code> to combine filters. All filters must match.</p>\n<p>Example using two filters: <code>filter[]=manufacturer,is,Apple&amp;filter[]=device_type,is,Laptop</code></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>field</strong></th>\n<th><strong>type</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>uuid string</td>\n</tr>\n<tr>\n<td>state</td>\n<td>\"live\", \"pending_pickup\", \"retired\"</td>\n</tr>\n<tr>\n<td>pickup_id</td>\n<td>uuid string (the <code>id</code> returned by the pickups endpoint). Supports <code>is</code> and <code>is_any_of</code></td>\n</tr>\n<tr>\n<td>location_id</td>\n<td>uuid string (the <code>uuid</code> returned by the locations endpoint). Supports <code>is</code> and <code>is_any_of</code></td>\n</tr>\n<tr>\n<td>created_at</td>\n<td>date, <code>YYYY-MM-DD</code></td>\n</tr>\n<tr>\n<td>updated_at</td>\n<td>date, <code>YYYY-MM-DD</code></td>\n</tr>\n<tr>\n<td>serial_number</td>\n<td>string</td>\n</tr>\n<tr>\n<td>device_type</td>\n<td>string</td>\n</tr>\n<tr>\n<td>manufacturer</td>\n<td>string</td>\n</tr>\n<tr>\n<td>asset_tag</td>\n<td>string</td>\n</tr>\n<tr>\n<td>enrolled_status</td>\n<td>\"unenrolled\", \"enrolled\", \"not_found\"</td>\n</tr>\n<tr>\n<td>security_level</td>\n<td>\"ICloud Locked\", \"BIOS Locked\", \"Activation Lock\", \"EFI Locked\", \"Elevated Security\"</td>\n</tr>\n</tbody>\n</table>\n</div><div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>operators</strong></th>\n<th><strong>description</strong></th>\n<th><strong>example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>is, =, equals</td>\n<td>exact match</td>\n<td>serial_number,equals,F00B4R</td>\n</tr>\n<tr>\n<td>not, !=</td>\n<td>exclude exact match</td>\n<td>serial_number,not,B4Z</td>\n</tr>\n<tr>\n<td>contains</td>\n<td>partial match  <br />(case insensitive)</td>\n<td>serial_number,contains,B4R</td>\n</tr>\n<tr>\n<td>is_any_of</td>\n<td>match one of several values</td>\n<td>enrolled_status,is_any_of,enrolled,not_found</td>\n</tr>\n<tr>\n<td>not_in</td>\n<td>exclude several values</td>\n<td>enrolled_status,not_in,enrolled,not_found</td>\n</tr>\n<tr>\n<td>starts_with</td>\n<td>partial match string starting with value  <br />(case insensitive)</td>\n<td>asset_tag,starts_with,foo</td>\n</tr>\n<tr>\n<td>ends_with</td>\n<td>partial match string ending with value  <br />(case insensitive)</td>\n<td>asset_tag,ends_with,baz</td>\n</tr>\n<tr>\n<td>is_empty</td>\n<td>null</td>\n<td>asset_tag,is_empty</td>\n</tr>\n<tr>\n<td>is_not_empty</td>\n<td>non-null</td>\n<td>asset_tag,is_not_empty</td>\n</tr>\n<tr>\n<td>after</td>\n<td>date later than value</td>\n<td>updated_at,after,2026-09-01</td>\n</tr>\n<tr>\n<td>on_or_after</td>\n<td>date on or later than value</td>\n<td>updated_at,on_or_after,2026-09-01</td>\n</tr>\n<tr>\n<td>before</td>\n<td>date earlier than value</td>\n<td>created_at,before,2026-01-01</td>\n</tr>\n<tr>\n<td>on_or_before</td>\n<td>date on or earlier than value</td>\n<td>created_at,on_or_before,2026-01-01</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"date-filters\">Date filters</h3>\n<p><code>created_at</code> and <code>updated_at</code> support <code>is</code>, <code>not</code>, <code>after</code>, <code>on_or_after</code>, <code>before</code> and <code>on_or_before</code>. Values must be <code>YYYY-MM-DD</code> dates, such as <code>2026-09-01</code>, and are compared by calendar day in UTC. Timestamps and other formats are rejected.</p>\n<p><code>updated_at</code> changes when a device is added, when its details change, or when a certificate of destruction is attached to that device. A certificate attached only at the pickup level does not change it.</p>\n<p><strong>Syncing new and updated devices:</strong> after a one-time full sync, request a rolling window each day instead of only the changes since your last run. For example, for the last 40 days:</p>\n<p><code>filter[]=updated_at,on_or_after,2026-08-30&amp;page[size]=200</code></p>\n<h3 id=\"errors\">Errors</h3>\n<p>An invalid filter returns <code>400 Bad Request</code> with a message that explains the problem:</p>\n<p><code>{ \"errors\": \"Invalid filter: retired_at is not an allowed filter\" }</code></p>\n<p>This includes a field that can't be filtered, an unknown operator, an operator a field doesn't support, and a date that isn't <code>YYYY-MM-DD</code>.</p>\n<h3 id=\"pagination\">Pagination</h3>\n<p>Use pagination to navigate pages of collections.</p>\n<p><strong>page[size]</strong>: Defaults to 25. Max 200</p>\n<p><strong>page[number]</strong>: Defaults to 1.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","assets"],"host":["https://api.revivn.dev"],"query":[{"key":"page[number]","value":"1"},{"key":"page[size]","value":"25"},{"key":"filter[]","value":""}],"variable":[]}},"response":[{"id":"deb3828e-7925-4e23-a715-30f682a5ebe2","name":"filter by pickup","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"https://api.revivn.dev/api/v1/assets?filter[]=pickup_id,is,3f1c9a2e-5b7d-4e8a-9c0f-1a2b3c4d5e6f","host":["https://api.revivn.dev"],"path":["api","v1","assets"],"query":[{"key":"filter[]","value":"pickup_id,is,3f1c9a2e-5b7d-4e8a-9c0f-1a2b3c4d5e6f"}]}},"status":"OK","code":200,"_postman_previewlanguage":"text","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":""},{"id":"b08fd27a-333e-4296-9cfc-66ca30fd1a27","name":"with pagination","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"https://api.revivn.dev/api/v1/assets?page[size]=50&page[number]=5","host":["https://api.revivn.dev"],"path":["api","v1","assets"],"query":[{"key":"page[size]","value":"50"},{"key":"page[number]","value":"5"}]}},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null},{"id":"91160db5-7791-442c-8701-ce4cfc5b2c25","name":"filter + pagination","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/assets?filter[]=pickup_id,is,3f1c9a2e-5b7d-4e8a-9c0f-1a2b3c4d5e6f&filter[]=device_type,is,Laptop&page[number]=3&page[size]=20","host":["https://api.revivn.dev"],"path":["api","v1","assets"],"query":[{"key":"filter[]","value":"pickup_id,is,3f1c9a2e-5b7d-4e8a-9c0f-1a2b3c4d5e6f"},{"key":"filter[]","value":"device_type,is,Laptop"},{"key":"page[number]","value":"3"},{"key":"page[size]","value":"20"}]}},"status":"OK","code":200,"_postman_previewlanguage":"text","header":null,"cookie":[],"responseTime":null,"body":""},{"id":"a0b29fa9-cc46-46b7-a225-9437a0972c01","name":"filter by date","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/assets?filter[]=updated_at,on_or_after,2026-09-01&page[size]=200","host":["https://api.revivn.dev"],"path":["api","v1","assets"],"query":[{"key":"filter[]","value":"updated_at,on_or_after,2026-09-01"},{"key":"page[size]","value":"200"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{}"},{"id":"1404fb51-445f-418b-92aa-2e7ffbb14167","name":"invalid filters","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/assets?filter[]=retired_at,after,2026-07-11","host":["https://api.revivn.dev"],"path":["api","v1","assets"],"query":[{"key":"filter[]","value":"retired_at,after,2026-07-11"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\"errors\": \"Invalid filter: retired_at is not an allowed filter\"}"}],"_postman_id":"a3826ce6-441f-4a22-b57a-5a688765adc0"}],"id":"d64c3c5d-8f28-4c6b-9258-7c06e862c96b","_postman_id":"d64c3c5d-8f28-4c6b-9258-7c06e862c96b","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}},{"name":"pickups","item":[{"name":"List pickups","id":"9b3ffab5-7ff3-4f1c-b665-80d9fc888c2f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/pickups?page[number]=1&page[size]=25&filter[]","description":"<h1 id=\"list-pickups\">List Pickups</h1>\n<p>Returns a paginated collection of pickups.</p>\n<h2 id=\"pickup-variables\">Pickup variables</h2>\n<p>List of variables that appear in each pickup object:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>pickup</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>cod_url</td>\n</tr>\n<tr>\n<td>comments</td>\n</tr>\n<tr>\n<td>confirmed_time</td>\n</tr>\n<tr>\n<td>ewaste_in_lbs</td>\n</tr>\n<tr>\n<td>id</td>\n</tr>\n<tr>\n<td>initial_report_url</td>\n</tr>\n<tr>\n<td>order_number</td>\n</tr>\n<tr>\n<td>pickup_contacts</td>\n</tr>\n<tr>\n<td>scheduled_date</td>\n</tr>\n<tr>\n<td>state</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"metadata\">Metadata</h2>\n<p>Included in the response is a <code>meta</code> object with page and count information:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>value</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>total_pages</td>\n<td>number</td>\n</tr>\n<tr>\n<td>count</td>\n<td>number</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"parameters\">Parameters</h2>\n<h3 id=\"filtering\">Filtering</h3>\n<p>A filter can be built using a <strong>field</strong>, <strong>operator</strong>, and a <strong>value</strong>.</p>\n<p>Example using two filters: <code>filter[]=state,is,complete&amp;filter[]=initial_report_published_at,after,2026-01-01</code></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>field</strong></th>\n<th><strong>type</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>location_id</td>\n<td>integer</td>\n</tr>\n<tr>\n<td>order_number</td>\n<td>string</td>\n</tr>\n<tr>\n<td>state</td>\n<td>\"canceled\", \"complete\", \"initial_report_ready\", \"missing_info\", \"on_hold\", \"pending_confirmation\", \"processing\", \"reschedule_pending\", \"scheduled\", \"verifying\"</td>\n</tr>\n<tr>\n<td>initial_report_published_at</td>\n<td>date string  <br /><code>YYYY-MM-DD</code>, for example <code>2026-07-16</code></td>\n</tr>\n</tbody>\n</table>\n</div><div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>operators</strong></th>\n<th><strong>description</strong></th>\n<th><strong>example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>is, =, equals</td>\n<td>exact match</td>\n<td>order_number,is,3F9A1C2B</td>\n</tr>\n<tr>\n<td>not, !=</td>\n<td>exclude exact match</td>\n<td>order_number,not,3F9A1C2B</td>\n</tr>\n<tr>\n<td>contains</td>\n<td>partial match  <br />(case insensitive)</td>\n<td></td>\n</tr>\n<tr>\n<td>is_any_of</td>\n<td>match one of several values</td>\n<td>state,is_any_of,processing,initial_report_ready,on_hold,verifying</td>\n</tr>\n<tr>\n<td>not_in</td>\n<td>exclude several values</td>\n<td>state,not_in,canceled,complete</td>\n</tr>\n<tr>\n<td>starts_with</td>\n<td>partial match string starting with value  <br />(case insensitive)</td>\n<td></td>\n</tr>\n<tr>\n<td>ends_with</td>\n<td>partial match string ending with value  <br />(case insensitive)</td>\n<td></td>\n</tr>\n<tr>\n<td>is_empty</td>\n<td>null</td>\n<td></td>\n</tr>\n<tr>\n<td>is_not_empty</td>\n<td>non-null</td>\n<td></td>\n</tr>\n<tr>\n<td>before, on_or_before, &lt;, &lt;=</td>\n<td>before date  <br />Use YYYY-MM-DD</td>\n<td>initial_report_published_at,before,2026-01-01</td>\n</tr>\n<tr>\n<td>after, on_or_after, &gt;, &gt;=</td>\n<td>after date  <br />Use YYYY-MM-DD</td>\n<td>initial_report_published_at,after,2026-01-01</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"pagination\">Pagination</h3>\n<p>Use pagination to navigate pages of collections.</p>\n<p><strong>page[size]</strong>: Defaults to 25. Max 200</p>\n<p><strong>page[number]</strong>: Defaults to 1.</p>\n<h3 id=\"errors\">Errors</h3>\n<p>An invalid filter returns <code>400 Bad Request</code> with a message that explains the problem:</p>\n<p><code>{ \"errors\": \"Invalid filter: date/time field value out of range: \\\"26-01-01\\\"\" }</code></p>\n<p>This includes a field that can't be filtered, an unknown operator, and a date that isn't <code>YYYY-MM-DD</code>.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","pickups"],"host":["https://api.revivn.dev"],"query":[{"key":"page[number]","value":"1"},{"key":"page[size]","value":"25"},{"key":"filter[]","value":""}],"variable":[]}},"response":[{"id":"cb9b2a48-662e-453a-91cf-4b0879ac264c","name":"filter by location","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/pickups?filter[]=location_id,is,ef989f2d-fe6c-448b-a742-3b8671d1eec5","host":["https://api.revivn.dev"],"path":["api","v1","pickups"],"query":[{"key":"filter[]","value":"location_id,is,ef989f2d-fe6c-448b-a742-3b8671d1eec5","type":"text"}]}},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null},{"id":"a2419608-20ea-4c72-9265-84be9e45f035","name":"with pagination","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/pickups?page[number]=1&page[size]=25","host":["https://api.revivn.dev"],"path":["api","v1","pickups"],"query":[{"key":"page[number]","value":"1"},{"key":"page[size]","value":"25"}]}},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null},{"id":"d510ac2c-bead-4c2f-84bc-63adcdcbee9c","name":"filter + pagination","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/pickups?filter[]=state,not_in,archived,draft,canceled&page[size]=25&page[number]=1","host":["https://api.revivn.dev"],"path":["api","v1","pickups"],"query":[{"key":"filter[]","value":"state,not_in,archived,draft,canceled"},{"key":"page[size]","value":"25"},{"key":"page[number]","value":"1"}]}},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"9b3ffab5-7ff3-4f1c-b665-80d9fc888c2f"},{"name":"Create Pickup","id":"4cc9f164-e1e5-4027-bbc5-f3f8c054b851","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"pickup\": {\n    \"scheduled_at\": \"<date>\",\n    \"requested_time\": \"<string>\",\n    \"reason\": \"<string>\",\n    \"location_id\": \"<uuid>\",\n    \"estimated_items\": [\n      {\n        \"name\": \"<string>\",\n        \"quantity\": \"<integer>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"quantity\": \"<integer>\"\n      }\n    ],\n    \"contacts\": [\n      {\n        \"email\": \"<string>\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"phone_number\": \"<string>\",\n        \"point_of_contact_type\": \"<string>\"\n      },\n      {\n        \"email\": \"<string>\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"phone_number\": \"<string>\",\n        \"point_of_contact_type\": \"<string>\"\n      }\n    ],\n    \"comments\": \"<string>\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/pickups","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","pickups"],"host":["https://api.revivn.dev"],"query":[],"variable":[]}},"response":[],"_postman_id":"4cc9f164-e1e5-4027-bbc5-f3f8c054b851"}],"id":"c562e922-71c6-4d63-9cb9-e547a3006a25","_postman_id":"c562e922-71c6-4d63-9cb9-e547a3006a25","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}},{"name":"asset_retrievals","item":[{"name":":asset_retrieval_id","item":[{"name":"Cancel Asset Retrieval","id":"d23790d4-9213-4607-b329-8766a3a3d2c0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals/:asset_retrieval_id/cancel","description":"<p>Cancels an asset retrieval.</p>\n<h2 id=\"path-variables\">Path variables</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>variable</th>\n<th>description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>asset_retrieval_id</td>\n<td>The <code>id</code> of the asset retrieval, from <strong>Create asset retrieval</strong> or <strong>List asset retrievals</strong>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"body\">Body</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>required</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>cancellation_reason</td>\n<td>no</td>\n<td>string. Revivn saves it with the cancellation.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"when-you-can-cancel\">When you can cancel</h2>\n<p>You can cancel an asset retrieval when its <code>order_status</code> is one of these values:</p>\n<ul>\n<li><code>order_placed</code></li>\n<li><code>labels_printed</code></li>\n<li><code>package_out_to_employee</code></li>\n<li><code>package_received_by_employee</code></li>\n<li><code>order_stale</code></li>\n</ul>\n<h2 id=\"refunds-and-charges\">Refunds and charges</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><code>order_status</code> when you cancel</th>\n<th>what happens</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>order_placed</code></td>\n<td>Revivn voids the shipping labels. If the price was taken from your earnings balance, Revivn credits the full price back to it. An order paid with <code>payment_method</code> <code>payment</code> gets no earnings credit.</td>\n</tr>\n<tr>\n<td><code>labels_printed</code>, <code>package_out_to_employee</code>, <code>package_received_by_employee</code> or <code>order_stale</code></td>\n<td>Revivn voids the return label. There is no refund. If the order is Direct to Revivn and its fees were waived (<code>box_type</code> is not <code>desktop</code> or <code>monitor</code>), Revivn charges the full price: from your earnings balance when it covers the price or no Stripe card is on file, otherwise to the Stripe card on file.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<p>Returns <code>200 OK</code>. The cancelled asset retrieval is in the <code>asset_retrieval</code> key, and its <code>order_status</code> is <code>order_cancelled</code>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"asset_retrieval\": { ... }\n}\n</code></pre>\n<p>It has the same fields as each item in <strong>List asset retrievals</strong>, including <code>devices</code>. See that request for the field list.</p>\n<p>If you subscribe to the <code>Retrieval Cancelled</code> webhook event, Revivn also sends that event. See the <strong>Webhooks</strong> folder.</p>\n<h2 id=\"errors\">Errors</h2>\n<p>Returns <code>404 Not Found</code> when no asset retrieval with that <code>id</code> exists in your organization.</p>\n<p>Returns <code>422 Unprocessable Entity</code> when the asset retrieval cannot be cancelled in its current <code>order_status</code>. For example, it is already <code>order_cancelled</code>, the employee shipped the box back (<code>package_out_to_final_destination</code> or <code>package_received_by_final_destination</code>), or it is <code>order_completed</code>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\"Invalid state transition\"]\n}\n</code></pre>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","asset_retrievals",":asset_retrieval_id","cancel"],"host":["https://api.revivn.dev"],"query":[],"variable":[{"type":"any","value":"","key":"asset_retrieval_id"}]}},"response":[],"_postman_id":"d23790d4-9213-4607-b329-8766a3a3d2c0"},{"name":"Get asset retrieval","id":"1aaa40f1-b36f-f2a4-6484-c1807151050f","request":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/asset_retrievals/:asset_retrieval_id","description":"<h1 id=\"get-asset-retrieval\">Get Asset Retrieval</h1>\n<p>Returns one asset retrieval. Use it to check the status of an order without paging through <strong>List asset retrievals</strong>.</p>\n<h2 id=\"path-variables\">Path variables</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>variable</th>\n<th>description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>asset_retrieval_id</td>\n<td>The <code>id</code> of the asset retrieval, from <strong>Create asset retrieval</strong> or <strong>List asset retrievals</strong>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<p>The asset retrieval is in the <code>asset_retrieval</code> key:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"asset_retrieval\": { ... }\n}\n</code></pre>\n<p>It has the same fields as each item in <strong>List asset retrievals</strong>, including <code>devices</code>. See that request for the field list.</p>\n<h2 id=\"errors\">Errors</h2>\n<p>Returns <code>404 Not Found</code> when no asset retrieval with that <code>id</code> exists in your organization. This includes a deleted asset retrieval.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","asset_retrievals",":asset_retrieval_id"],"host":["https://api.revivn.dev"],"query":[],"variable":[{"id":"a7d76449-cccb-4e20-b306-ac42bb61af4d","type":"any","value":"","key":"asset_retrieval_id"}]}},"response":[{"id":"fa5629f6-500b-cc15-4000-b569f954fdb4","name":"asset retrieval","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/asset_retrievals/:asset_retrieval_id","host":["https://api.revivn.dev"],"path":["api","v1","asset_retrievals",":asset_retrieval_id"],"variable":[{"key":"asset_retrieval_id","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"asset_retrieval\": {\n    \"serial_number\": \"C02XG1JHJGH5\",\n    \"order_number\": \"ADC8BD2F\",\n    \"created_at\": \"2026-10-20T18:39:25.696Z\",\n    \"updated_at\": \"2026-10-20T18:39:25.696Z\",\n    \"last_synced_at\": null,\n    \"employee_first_name\": \"Jane\",\n    \"employee_last_name\": \"Doe\",\n    \"id\": \"33a41007-afbe-4999-9bdb-cc24622d9d80\",\n    \"order_status\": \"package_out_to_final_destination\",\n    \"employee_tracking_number\": \"1Z999AA10123456784\",\n    \"employee_tracking_status\": \"delivered\",\n    \"return_tracking_number\": \"1Z999AA10123456791\",\n    \"return_tracking_status\": \"in_transit\",\n    \"enrolled_status\": \"enrolled\",\n    \"reminders_sent_count\": 0,\n    \"devices\": [\n      {\n        \"serial_number\": \"C02XG1JHJGH5\",\n        \"manufacturer\": \"Apple\",\n        \"model\": \"MacBook Pro\",\n        \"device_type\": \"laptop\",\n        \"enrolled_status\": \"enrolled\",\n        \"asset_id\": null\n      },\n      {\n        \"serial_number\": \"DMPXK2ABCD12\",\n        \"manufacturer\": \"Apple\",\n        \"model\": \"iPad Pro\",\n        \"device_type\": \"tablet\",\n        \"enrolled_status\": null,\n        \"asset_id\": null\n      }\n    ]\n  }\n}"},{"id":"4b3243b0-1d96-8396-a064-d4235ad7df27","name":"asset retrieval not found","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/asset_retrievals/:asset_retrieval_id","host":["https://api.revivn.dev"],"path":["api","v1","asset_retrievals",":asset_retrieval_id"],"variable":[{"key":"asset_retrieval_id","value":""}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"value":"application/json","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": 404,\n  \"error\": \"Not Found\"\n}\n"}],"_postman_id":"1aaa40f1-b36f-f2a4-6484-c1807151050f"}],"id":"844a6438-0ed1-464c-bc3b-244e72632037","_postman_id":"844a6438-0ed1-464c-bc3b-244e72632037","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}},{"name":"List asset retrievals","id":"43d4cbf2-40f2-4977-b2ec-1a42808a362b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals?page[size]=25&page[number]=1","description":"<h1 id=\"list-asset-retrievals\">List Asset Retrievals</h1>\n<p>Returns a paginated collection of asset retrievals.</p>\n<h2 id=\"asset-retrieval-variables\">Asset retrieval variables</h2>\n<p>List of variables that appear in each asset retrieval object:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>asset_retrieval</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>created_at</td>\n</tr>\n<tr>\n<td>devices</td>\n</tr>\n<tr>\n<td>employee_first_name</td>\n</tr>\n<tr>\n<td>employee_last_name</td>\n</tr>\n<tr>\n<td>employee_tracking_number</td>\n</tr>\n<tr>\n<td>employee_tracking_status</td>\n</tr>\n<tr>\n<td>enrolled_status</td>\n</tr>\n<tr>\n<td>id</td>\n</tr>\n<tr>\n<td>last_synced_at</td>\n</tr>\n<tr>\n<td>order_number</td>\n</tr>\n<tr>\n<td>order_status</td>\n</tr>\n<tr>\n<td>reminders_sent_count</td>\n</tr>\n<tr>\n<td>return_tracking_number</td>\n</tr>\n<tr>\n<td>return_tracking_status</td>\n</tr>\n<tr>\n<td>serial_number</td>\n</tr>\n<tr>\n<td>updated_at</td>\n</tr>\n</tbody>\n</table>\n</div><p><code>serial_number</code> and <code>enrolled_status</code> describe the first device in the order. To see every device, use <code>devices</code>.</p>\n<h3 id=\"devices\"><code>devices</code></h3>\n<p>Every device in the order, in the order they were added:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>serial_number</td>\n<td>string or null</td>\n</tr>\n<tr>\n<td>manufacturer</td>\n<td>string</td>\n</tr>\n<tr>\n<td>model</td>\n<td>string</td>\n</tr>\n<tr>\n<td>device_type</td>\n<td>string</td>\n</tr>\n<tr>\n<td>enrolled_status</td>\n<td>string, or null when the device has no serial number or Revivn has not received it</td>\n</tr>\n<tr>\n<td>asset_id</td>\n<td>string, the <code>id</code> of the asset Revivn created for this device (see <strong>Show asset</strong>). Null until Revivn receives and processes the device. Only Direct to Revivn orders get one, because other orders ship back to your return address.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"metadata\">Metadata</h2>\n<p>Included in the response is a <code>meta</code> object with page and count information:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>value</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>total_pages</td>\n<td>number</td>\n</tr>\n<tr>\n<td>count</td>\n<td>number</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"parameters\">Parameters</h2>\n<h3 id=\"filtering\">Filtering</h3>\n<p>A filter can be built using a <strong>field</strong>, <strong>operator</strong>, and a <strong>value</strong>.</p>\n<p>Example using two filters: <code>filter[]=box_type,is,laptop&amp;filter[]=created_at,after,2026-01-01</code></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>field</strong></th>\n<th><strong>type</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>order_number</td>\n<td>string</td>\n</tr>\n<tr>\n<td>box_type</td>\n<td>\"laptop\", \"laptop_mobile\", \"mobile_phone\", \"monitor\", \"laptop_tablet\", \"desktop\", \"bulk\", \"tablet\"</td>\n</tr>\n<tr>\n<td>serial_number</td>\n<td>string</td>\n</tr>\n<tr>\n<td>created_at</td>\n<td>date string  <br /><code>YYYY-MM-DD</code>, for example <code>2026-07-16</code></td>\n</tr>\n<tr>\n<td>updated_at</td>\n<td>date string  <br /><code>YYYY-MM-DD</code>, for example <code>2026-07-16</code></td>\n</tr>\n</tbody>\n</table>\n</div><div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>operators</strong></th>\n<th><strong>description</strong></th>\n<th><strong>example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>is, =, equals</td>\n<td>exact match</td>\n<td>order_number,is,DED5EC</td>\n</tr>\n<tr>\n<td>not, !=</td>\n<td>exclude exact match</td>\n<td>order_number,not,DED5EC</td>\n</tr>\n<tr>\n<td>contains</td>\n<td>partial match  <br />(case insensitive)</td>\n<td></td>\n</tr>\n<tr>\n<td>is_any_of</td>\n<td>match one of several values</td>\n<td>box_type,is_any_of,laptop,laptop_tablet,laptop_mobile,bulk</td>\n</tr>\n<tr>\n<td>not_in</td>\n<td>exclude several values</td>\n<td>box_type,not_in,desktop,tablet,monitor</td>\n</tr>\n<tr>\n<td>starts_with</td>\n<td>partial match string starting with value  <br />(case insensitive)</td>\n<td>box_type,starts_with,laptop</td>\n</tr>\n<tr>\n<td>ends_with</td>\n<td>partial match string ending with value  <br />(case insensitive)</td>\n<td>box_type,ends_with,tablet</td>\n</tr>\n<tr>\n<td>is_empty</td>\n<td>null</td>\n<td>serial_number,is_empty</td>\n</tr>\n<tr>\n<td>is_not_empty</td>\n<td>non-null</td>\n<td>serial_number,is_not_empty</td>\n</tr>\n<tr>\n<td>before, on_or_before, &lt;, &lt;=</td>\n<td>before date  <br />Use YYYY-MM-DD</td>\n<td>created_at,before,2026-01-01</td>\n</tr>\n<tr>\n<td>after, on_or_after, &gt;, &gt;=</td>\n<td>after date  <br />Use YYYY-MM-DD</td>\n<td>created_at,after,2026-01-01</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"search\">Search</h3>\n<p>Use <code>q</code> to find orders by text, for example <code>q=jane doe</code> or <code>q=PMQ4</code>. The search ignores case.</p>\n<ul>\n<li>Every word in <code>q</code> must match the same order or one of its devices.</li>\n<li>A word matches the start of a word in the employee's first or last name, the order status, the location name, the device type, the order number, or a device serial number.</li>\n<li>A word of three or more characters also matches anywhere in the order number or a device serial number. For example, <code>AB34</code> finds order <code>5E12AB34</code>.</li>\n<li>A matching order is returned with all of its <code>devices</code>, even when only one device matched.</li>\n<li>You can combine <code>q</code> with filters and pagination, for example <code>q=jane&amp;filter[]=box_type,is,laptop&amp;page[size]=50</code>.</li>\n</ul>\n<h3 id=\"pagination\">Pagination</h3>\n<p>Use pagination to navigate pages of collections.</p>\n<p><strong>page[size]</strong>: Defaults to 25. Max 200</p>\n<p><strong>page[number]</strong>: Defaults to 1.</p>\n<h3 id=\"errors\">Errors</h3>\n<p>An invalid filter returns <code>400 Bad Request</code> with a message that explains the problem:</p>\n<p><code>{ \"errors\": \"Invalid filter: date/time field value out of range: \\\"26-01-01\\\"\" }</code></p>\n<p>This includes a field that can't be filtered, an unknown operator, and a date that isn't <code>YYYY-MM-DD</code>.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","asset_retrievals"],"host":["https://api.revivn.dev"],"query":[{"key":"page[size]","value":"25"},{"key":"page[number]","value":"1"}],"variable":[]}},"response":[],"_postman_id":"43d4cbf2-40f2-4977-b2ec-1a42808a362b"},{"name":"Create asset retrieval","id":"e7e5eb09-e054-4a81-9332-c08578b29995","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"asset_retrieval\": {\n        \"direct_to_revivn\": \"<boolean>\",\n        \"asset\": {\n            \"serial_number\": \"<string>\",\n            \"model\": \"<string>\",\n            \"manufacturer\": \"<string>\"\n        },\n        \"employee_label\": {\n            \"first_name\": \"<string>\",\n            \"last_name\": \"<string>\",\n            \"email\": \"<string>\",\n            \"phone_number\": \"<string>\",\n            \"address\": \"<string>\",\n            \"address_two\": \"<string>\",\n            \"city\": \"<string>\",\n            \"state\": \"<string>\",\n            \"zipcode\": \"<string>\",\n            \"country\": \"<string>\"\n        },\n        \"return_recipient\": {\n            \"first_name\": \"<string>\",\n            \"last_name\": \"<string>\",\n            \"company\": \"<string>\",\n            \"email\": \"<string>\",\n            \"address\": \"<string>\",\n            \"address_two\": \"<string>\",\n            \"city\": \"<string>\",\n            \"state\": \"<string>\",\n            \"zipcode\": \"<string>\",\n            \"country\": \"<string>\"\n        },\n        \"payment_method\": \"<string>\",\n        \"insurance\": \"<string>\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals","description":"<h1 id=\"create-an-asset-retrieval\">Create an Asset Retrieval</h1>\n<blockquote>\n<p><strong>Please note:</strong> You may notice there are two keys in the response data; <code>asset_retrieval</code> and <code>asset_retreival</code>. The <code>asset_retreival</code> key will be deprecated and removed in the future. When building your automation workflow, be sure to use and expect the <code>asset_retrieval</code> key.</p>\n</blockquote>\n<p>Creates an asset retrieval (an order). Revivn ships a box to the employee, and the employee sends the device back to the return recipient, or to Revivn when <code>direct_to_revivn</code> is <code>true</code>.</p>\n<p>Send all fields inside an <code>asset_retrieval</code> object.</p>\n<h2 id=\"before-you-start\">Before you start</h2>\n<p>These three mistakes cause most failed orders:</p>\n<ul>\n<li><strong><code>insurance</code> must be a string.</strong> Send <code>\"1000\"</code>, not <code>1000</code>. A number is rejected with <code>422</code>.</li>\n<li><strong><code>direct_to_revivn</code> must be a JSON boolean.</strong> Send <code>true</code> or <code>false</code>, not <code>\"true\"</code>, <code>\"false\"</code>, <code>1</code>, or <code>0</code>. Other values are rejected with <code>422</code>.</li>\n<li><strong>An unrecognized <code>country</code> becomes <code>US</code> without an error.</strong> Revivn accepts <code>US</code>, <code>USA</code>, <code>United States</code>, and <code>United States of America</code>, and also <code>CA</code>, <code>CAN</code>, and <code>Canada</code> if your organization can ship to Canada (any capitalization). Revivn treats any other value, such as <code>Mexico</code> or a typo, as <code>US</code> when it checks the address, and does not tell you. Always send <code>US</code> or <code>CA</code>.</li>\n</ul>\n<h2 id=\"fields\">Fields</h2>\n<h3 id=\"asset_retrieval\"><code>asset_retrieval</code></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>required</th>\n<th>type and allowed values</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>insurance</td>\n<td>yes</td>\n<td>string: <code>\"0\"</code>, <code>\"1000\"</code>, <code>\"2000\"</code>, <code>\"3000\"</code>, <code>\"4000\"</code>, or <code>\"5000\"</code>. The coverage per box, in USD. Each <code>\"1000\"</code> of coverage adds $10.00 to the price. Use <code>\"0\"</code> for no insurance.</td>\n</tr>\n<tr>\n<td>direct_to_revivn</td>\n<td>no, defaults to <code>false</code></td>\n<td>boolean. <code>true</code> sends the device directly to Revivn. Then <code>return_recipient</code> and <code>payment_method</code> are not used.</td>\n</tr>\n<tr>\n<td>payment_method</td>\n<td>yes, unless <code>direct_to_revivn</code> is <code>true</code></td>\n<td><code>\"earnings\"</code> takes the price from your earnings balance. <code>\"payment\"</code> charges the Stripe card on file for your organization.</td>\n</tr>\n<tr>\n<td>employee_label</td>\n<td>yes</td>\n<td>object. The employee who receives the box and sends the device back. See below.</td>\n</tr>\n<tr>\n<td>return_recipient</td>\n<td>yes, unless <code>direct_to_revivn</code> is <code>true</code></td>\n<td>object. Where the employee sends the device. See below.</td>\n</tr>\n<tr>\n<td>box_type</td>\n<td>no, defaults to <code>laptop</code></td>\n<td>See <strong>Box types</strong>. Required with <code>assets</code> for any box that is not <code>laptop</code>.</td>\n</tr>\n<tr>\n<td>asset</td>\n<td>one of <code>asset</code> or <code>assets</code></td>\n<td>object. One device. See <strong>Single device retrieval</strong>.</td>\n</tr>\n<tr>\n<td>assets</td>\n<td>one of <code>asset</code> or <code>assets</code></td>\n<td>array. Several devices in one box. See <strong>Multi-device retrievals</strong>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"employee_label\"><code>employee_label</code></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>required</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>first_name</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>last_name</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>email</td>\n<td>yes</td>\n<td>string. A valid email address.</td>\n</tr>\n<tr>\n<td>address</td>\n<td>yes</td>\n<td>string. The street address only. Put the unit in <code>address_two</code>.</td>\n</tr>\n<tr>\n<td>address_two</td>\n<td>no</td>\n<td>string, for example <code>\"Apt 4B\"</code></td>\n</tr>\n<tr>\n<td>city</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>state</td>\n<td>yes</td>\n<td>string. The 2-letter state or province code, for example <code>\"NY\"</code>.</td>\n</tr>\n<tr>\n<td>zipcode</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>country</td>\n<td>yes</td>\n<td><code>\"US\"</code> or <code>\"CA\"</code>. See <strong>Before you start</strong>.</td>\n</tr>\n<tr>\n<td>phone_number</td>\n<td>no</td>\n<td>string, for example <code>\"+15555555555\"</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"return_recipient\"><code>return_recipient</code></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>required</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>first_name</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>last_name</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>address</td>\n<td>yes</td>\n<td>string. The street address only. Put the unit in <code>address_two</code>.</td>\n</tr>\n<tr>\n<td>address_two</td>\n<td>no</td>\n<td>string</td>\n</tr>\n<tr>\n<td>city</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>state</td>\n<td>yes</td>\n<td>string, for example <code>\"NY\"</code></td>\n</tr>\n<tr>\n<td>zipcode</td>\n<td>yes</td>\n<td>string</td>\n</tr>\n<tr>\n<td>country</td>\n<td>yes</td>\n<td><code>\"US\"</code> or <code>\"CA\"</code>. See <strong>Before you start</strong>.</td>\n</tr>\n<tr>\n<td>company</td>\n<td>no</td>\n<td>string. Printed on the return label.</td>\n</tr>\n<tr>\n<td>email</td>\n<td>no</td>\n<td>string</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"addresses\">Addresses</h2>\n<p>Asset retrievals can be sent to the United States and, if enabled for your organization, Canada. From Canada, the return address must also be in Canada, unless your organization is set up to return from Canada to the United States.</p>\n<p>Revivn checks the employee address, and the return address unless <code>direct_to_revivn</code> is <code>true</code>, before it creates the order. PO boxes are not supported. Use <strong>Validate address</strong> to check an address first.</p>\n<h2 id=\"single-device-retrieval\">Single device retrieval</h2>\n<p>Send <code>asset</code> for one device. All its fields are optional, but send them when you know them:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>serial_number</td>\n<td>string</td>\n</tr>\n<tr>\n<td>model</td>\n<td>string, for example <code>\"macbook pro\"</code></td>\n</tr>\n<tr>\n<td>manufacturer</td>\n<td>string, for example <code>\"apple\"</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>The device type comes from <code>box_type</code>. For example, <code>box_type</code> <code>desktop</code> makes the device a desktop.</p>\n<h2 id=\"multi-device-retrievals\">Multi-device retrievals</h2>\n<p>Send <code>assets</code> and <code>box_type</code> to put several devices in one box. <code>assets</code> is an array of 1 or more devices, up to the capacity of the box. Send <code>asset</code> or <code>assets</code>, not both.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>required</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>device_type</td>\n<td>yes</td>\n<td><code>\"laptop\"</code>, <code>\"desktop\"</code>, <code>\"mobile phone\"</code>, <code>\"tablet\"</code>, or <code>\"monitor\"</code>. Use lowercase, exactly as shown.</td>\n</tr>\n<tr>\n<td>serial_number</td>\n<td>no</td>\n<td>string</td>\n</tr>\n<tr>\n<td>model</td>\n<td>no</td>\n<td>string</td>\n</tr>\n<tr>\n<td>manufacturer</td>\n<td>no</td>\n<td>string</td>\n</tr>\n</tbody>\n</table>\n</div><p>The device types must match the box. For example, <code>laptop_mobile</code> takes exactly 1 <code>\"laptop\"</code> and 1 <code>\"mobile phone\"</code>.</p>\n<h2 id=\"box-types\">Box types</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Box Type</strong></th>\n<th><strong>Compatible Device Types</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>laptop</td>\n<td>1 Laptop</td>\n</tr>\n<tr>\n<td>laptop_mobile</td>\n<td>1 Laptop + 1 Mobile Phone</td>\n</tr>\n<tr>\n<td>laptop_tablet</td>\n<td>1 Laptop + 1 Tablet</td>\n</tr>\n<tr>\n<td>tablet</td>\n<td>1 Tablet</td>\n</tr>\n<tr>\n<td>tablet_mobile</td>\n<td>1 Tablet + 1 Mobile Phone</td>\n</tr>\n<tr>\n<td>mobile_phone</td>\n<td>1 Mobile Phone</td>\n</tr>\n<tr>\n<td>desktop</td>\n<td>1 Desktop</td>\n</tr>\n<tr>\n<td>monitor</td>\n<td>1 Monitor</td>\n</tr>\n<tr>\n<td>bulk</td>\n<td>Up to 10 Laptops and Tablets</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"errors\">Errors</h2>\n<p>Returns <code>422 Unprocessable Entity</code> when a field is missing or not valid. <code>errors</code> is a message that names the problem:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": \"Missing required employee_label fields: zipcode.\"\n}\n</code></pre>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>problem</th>\n<th><code>errors</code></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>employee_label</code> or <code>return_recipient</code> is missing</td>\n<td><code>Missing employee_label.</code> or <code>Missing return_recipient.</code></td>\n</tr>\n<tr>\n<td><code>employee_label.email</code> is not a valid email address</td>\n<td><code>Invalid employee email.</code></td>\n</tr>\n<tr>\n<td>a required address field is missing</td>\n<td><code>Missing required employee_label fields: zipcode.</code> (lists every missing field)</td>\n</tr>\n<tr>\n<td><code>asset</code> and <code>assets</code> are both missing or empty</td>\n<td><code>Missing asset. Send asset for one device, or assets and box_type for several devices.</code></td>\n</tr>\n<tr>\n<td><code>box_type</code> is not a supported value</td>\n<td><code>Invalid box_type. Supported values: ...</code></td>\n</tr>\n<tr>\n<td><code>insurance</code> is missing, a number, or not an allowed value</td>\n<td><code>Invalid insurance option. ...</code></td>\n</tr>\n<tr>\n<td><code>direct_to_revivn</code> is not <code>true</code> or <code>false</code></td>\n<td><code>Invalid direct to revivn option. Supported values: true, false.</code></td>\n</tr>\n<tr>\n<td><code>payment_method</code> is missing or not allowed</td>\n<td><code>Invalid payment method. ...</code></td>\n</tr>\n<tr>\n<td><code>payment_method</code> is <code>payment</code> and no Stripe card is on file</td>\n<td><code>Missing Stripe payment method</code></td>\n</tr>\n<tr>\n<td><code>payment_method</code> is <code>earnings</code> and the balance is too low</td>\n<td><code>Insufficient earnings balance</code></td>\n</tr>\n<tr>\n<td>the devices in <code>assets</code> do not match <code>box_type</code></td>\n<td><code>Invalid or missing device type</code>, or <code>Too many assets for box capacity ...</code></td>\n</tr>\n<tr>\n<td>UPS cannot validate an address</td>\n<td><code>error validating employee address: ...</code> or <code>error validating return address: ...</code></td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","asset_retrievals"],"host":["https://api.revivn.dev"],"query":[],"variable":[]}},"response":[{"id":"45617f4d-95c8-4497-ab73-e4d73da8fddf","name":"asset retrieval created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"asset_retrieval\": {\n    \"direct_to_revivn\": false,\n    \"payment_method\": \"earnings\",\n    \"insurance\": \"1000\",\n    \"asset\": {\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"model\": \"macbook pro\",\n      \"manufacturer\": \"apple\"\n    },\n    \"employee_label\": {\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"email\": \"jsmith@example.com\",\n      \"phone_number\": \"+15555555555\",\n      \"address\": \"23 Main St\",\n      \"address_two\": \"\",\n      \"city\": \"Rochester\",\n      \"state\": \"NY\",\n      \"zipcode\": \"14602\",\n      \"country\": \"US\"\n    },\n    \"return_recipient\": {\n      \"first_name\": \"Bob\",\n      \"last_name\": \"Smith\",\n      \"company\": \"Revivn\",\n      \"email\": \"bsmith@example.com\",\n      \"address\": \"147 Flushing Ave\",\n      \"address_two\": \"601\",\n      \"city\": \"Brooklyn\",\n      \"state\": \"NY\",\n      \"zipcode\": \"11205\",\n      \"country\": \"US\"\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n  \"asset_retreival\": {\n    \"employee_first_name\": \"John\",\n    \"employee_last_name\": \"Smith\",\n    \"employee_email\": \"jsmith@example.com\",\n    \"employee_address\": \"23 Main St\",\n    \"employee_address_two\": \"\",\n    \"employee_address_city\": \"Rochester\",\n    \"employee_address_state\": \"NY\",\n    \"employee_address_zip_code\": \"14602\",\n    \"employee_address_country\": \"US\",\n    \"manufacturer\": \"apple\",\n    \"model\": \"macbook pro\",\n    \"serial_number\": \"C02Z1BBUL333\",\n    \"order_number\": \"5872A287\",\n    \"employee_phone\": null,\n    \"insurance_option\": 10,\n    \"return_recipient_company\": \"Revivn\",\n    \"return_recipient_address\": \"147 Flushing Ave\",\n    \"return_recipient_address_two\": \"601\",\n    \"return_recipient_address_city\": \"Brooklyn\",\n    \"return_recipient_address_state\": \"NY\",\n    \"return_recipient_address_zip_code\": \"11205\",\n    \"return_recipient_address_country\": \"US\",\n    \"return_recipient_first_name\": \"Bob\",\n    \"return_recipient_last_name\": \"Smith\",\n    \"return_recipient_email\": \"bsmith@example.com\",\n    \"id\": \"f7783bfe-de4b-4755-9ffb-b1b7fdd4c712\",\n    \"direct_to_revivn\": false,\n    \"inbound_asset_retrieval_shipment\": null,\n    \"outbound_asset_retrieval_shipment\": null\n  }\n}"},{"id":"24fc78cc-c770-4327-bbdc-162b243c8100","name":"asset retrieval created direct to revivn","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"asset_retrieval\": {\n    \"direct_to_revivn\": true,\n    \"insurance\": \"1000\",\n    \"asset\": {\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"model\": \"macbook pro\",\n      \"manufacturer\": \"apple\"\n    },\n    \"employee_label\": {\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"email\": \"jsmith@example.com\",\n      \"phone_number\": \"+15555555555\",\n      \"address\": \"23 Main St\",\n      \"address_two\": \"\",\n      \"city\": \"Rochester\",\n      \"state\": \"NY\",\n      \"zipcode\": \"14602\",\n      \"country\": \"US\"\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n  \"asset_retreival\": {\n    \"employee_first_name\": \"John\",\n    \"employee_last_name\": \"Smith\",\n    \"employee_email\": \"jsmith@example.com\",\n    \"employee_address\": \"23 Main St\",\n    \"employee_address_two\": \"\",\n    \"employee_address_city\": \"Rochester\",\n    \"employee_address_state\": \"NY\",\n    \"employee_address_zip_code\": \"14602\",\n    \"employee_address_country\": \"US\",\n    \"manufacturer\": \"apple\",\n    \"model\": \"macbook pro\",\n    \"serial_number\": \"C02Z1BBUL333\",\n    \"order_number\": \"5872A287\",\n    \"employee_phone\": null,\n    \"insurance_option\": 10,\n    \"return_recipient_company\": \"Revivn\",\n    \"return_recipient_address\": \"147 Flushing Ave\",\n    \"return_recipient_address_two\": \"601\",\n    \"return_recipient_address_city\": \"Brooklyn\",\n    \"return_recipient_address_state\": \"NY\",\n    \"return_recipient_address_zip_code\": \"11205\",\n    \"return_recipient_address_country\": \"US\",\n    \"return_recipient_first_name\": \"Bob\",\n    \"return_recipient_last_name\": \"Smith\",\n    \"return_recipient_email\": \"bsmith@example.com\",\n    \"id\": \"f7783bfe-de4b-4755-9ffb-b1b7fdd4c712\",\n    \"direct_to_revivn\": true,\n    \"inbound_asset_retrieval_shipment\": null,\n    \"outbound_asset_retrieval_shipment\": null\n  }\n}"},{"id":"db222e4a-27ff-4ff2-9074-58f687bf3add","name":"multi-device retrieval (laptop_mobile)","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"asset_retrieval\": {\n    \"direct_to_revivn\": false,\n    \"payment_method\": \"earnings\",\n    \"insurance\": \"1000\",\n    \"employee_label\": {\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"email\": \"jsmith@example.com\",\n      \"phone_number\": \"+15555555555\",\n      \"address\": \"23 Main St\",\n      \"address_two\": \"\",\n      \"city\": \"Rochester\",\n      \"state\": \"NY\",\n      \"zipcode\": \"14602\",\n      \"country\": \"US\"\n    },\n    \"return_recipient\": {\n      \"first_name\": \"Bob\",\n      \"last_name\": \"Smith\",\n      \"company\": \"Revivn\",\n      \"email\": \"bsmith@example.com\",\n      \"address\": \"147 Flushing Ave\",\n      \"address_two\": \"601\",\n      \"city\": \"Brooklyn\",\n      \"state\": \"NY\",\n      \"zipcode\": \"11205\",\n      \"country\": \"US\"\n    },\n    \"box_type\": \"laptop_mobile\",\n    \"assets\": [\n      {\n        \"serial_number\": \"C02Z1BBUL333\",\n        \"model\": \"macbook pro\",\n        \"manufacturer\": \"apple\",\n        \"device_type\": \"laptop\"\n      },\n      {\n        \"serial_number\": \"F2LXK0Q1HG7J\",\n        \"model\": \"iphone 15\",\n        \"manufacturer\": \"apple\",\n        \"device_type\": \"mobile phone\"\n      }\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"asset_retrieval\": {\n    \"order_number\": \"64A0C66D\",\n    \"employee_first_name\": \"John\",\n    \"employee_last_name\": \"Smith\",\n    \"employee_email\": \"jsmith@example.com\",\n    \"employee_phone\": \"+15555555555\",\n    \"employee_address\": \"23 Main St\",\n    \"employee_address_two\": \"\",\n    \"employee_address_city\": \"Rochester\",\n    \"employee_address_state\": \"NY\",\n    \"employee_address_zip_code\": \"14602\",\n    \"employee_address_country\": \"US\",\n    \"return_recipient_first_name\": \"Bob\",\n    \"return_recipient_last_name\": \"Smith\",\n    \"return_recipient_address\": \"147 Flushing Ave\",\n    \"return_recipient_address_two\": \"601\",\n    \"return_recipient_address_city\": \"Brooklyn\",\n    \"return_recipient_address_state\": \"NY\",\n    \"return_recipient_address_zip_code\": \"11205\",\n    \"return_recipient_address_country\": \"US\",\n    \"return_recipient_company\": \"Revivn\",\n    \"return_recipient_email\": \"bsmith@example.com\",\n    \"manufacturer\": \"apple\",\n    \"model\": \"macbook pro\",\n    \"serial_number\": \"C02Z1BBUL333\",\n    \"insurance_option\": 10,\n    \"state\": \"order_placed\",\n    \"created_at\": \"2026-10-16T13:17:24.429Z\",\n    \"reminders_muted_at\": null,\n    \"asset_retrieval_reminders_count\": 0,\n    \"id\": \"ef36fa15-67d4-43f2-8e3f-7feefefa97b1\",\n    \"inbound_asset_retrieval_shipment\": null,\n    \"outbound_asset_retrieval_shipment\": null,\n    \"location\": null,\n    \"direct_to_revivn\": false,\n    \"asset_retrieval_devices\": [\n      {\n        \"id\": 384,\n        \"manufacturer\": \"apple\",\n        \"model\": \"macbook pro\",\n        \"serial_number\": \"C02Z1BBUL333\",\n        \"device_type\": \"laptop\",\n        \"box_size\": null\n      },\n      {\n        \"id\": 385,\n        \"manufacturer\": \"apple\",\n        \"model\": \"iphone 15\",\n        \"serial_number\": \"F2LXK0Q1HG7J\",\n        \"device_type\": \"mobile phone\",\n        \"box_size\": null\n      }\n    ]\n  },\n  \"asset_retreival\": {\n    \"order_number\": \"64A0C66D\",\n    \"employee_first_name\": \"John\",\n    \"employee_last_name\": \"Smith\",\n    \"employee_email\": \"jsmith@example.com\",\n    \"employee_phone\": \"+15555555555\",\n    \"employee_address\": \"23 Main St\",\n    \"employee_address_two\": \"\",\n    \"employee_address_city\": \"Rochester\",\n    \"employee_address_state\": \"NY\",\n    \"employee_address_zip_code\": \"14602\",\n    \"employee_address_country\": \"US\",\n    \"return_recipient_first_name\": \"Bob\",\n    \"return_recipient_last_name\": \"Smith\",\n    \"return_recipient_address\": \"147 Flushing Ave\",\n    \"return_recipient_address_two\": \"601\",\n    \"return_recipient_address_city\": \"Brooklyn\",\n    \"return_recipient_address_state\": \"NY\",\n    \"return_recipient_address_zip_code\": \"11205\",\n    \"return_recipient_address_country\": \"US\",\n    \"return_recipient_company\": \"Revivn\",\n    \"return_recipient_email\": \"bsmith@example.com\",\n    \"manufacturer\": \"apple\",\n    \"model\": \"macbook pro\",\n    \"serial_number\": \"C02Z1BBUL333\",\n    \"insurance_option\": 10,\n    \"state\": \"order_placed\",\n    \"created_at\": \"2026-10-16T13:17:24.429Z\",\n    \"reminders_muted_at\": null,\n    \"asset_retrieval_reminders_count\": 0,\n    \"id\": \"ef36fa15-67d4-43f2-8e3f-7feefefa97b1\",\n    \"inbound_asset_retrieval_shipment\": null,\n    \"outbound_asset_retrieval_shipment\": null,\n    \"location\": null,\n    \"direct_to_revivn\": false,\n    \"asset_retrieval_devices\": [\n      {\n        \"id\": 384,\n        \"manufacturer\": \"apple\",\n        \"model\": \"macbook pro\",\n        \"serial_number\": \"C02Z1BBUL333\",\n        \"device_type\": \"laptop\",\n        \"box_size\": null\n      },\n      {\n        \"id\": 385,\n        \"manufacturer\": \"apple\",\n        \"model\": \"iphone 15\",\n        \"serial_number\": \"F2LXK0Q1HG7J\",\n        \"device_type\": \"mobile phone\",\n        \"box_size\": null\n      }\n    ]\n  }\n}"},{"id":"a02a08ef-6685-d891-7726-82fe32e69a3c","name":"insurance is a number","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"asset_retrieval\": {\n    \"direct_to_revivn\": false,\n    \"payment_method\": \"earnings\",\n    \"insurance\": 1000,\n    \"asset\": {\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"model\": \"macbook pro\",\n      \"manufacturer\": \"apple\"\n    },\n    \"employee_label\": {\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"email\": \"jsmith@example.com\",\n      \"phone_number\": \"+15555555555\",\n      \"address\": \"23 Main St\",\n      \"address_two\": \"\",\n      \"city\": \"Rochester\",\n      \"state\": \"NY\",\n      \"zipcode\": \"14602\",\n      \"country\": \"US\"\n    },\n    \"return_recipient\": {\n      \"first_name\": \"Bob\",\n      \"last_name\": \"Smith\",\n      \"company\": \"Revivn\",\n      \"email\": \"bsmith@example.com\",\n      \"address\": \"147 Flushing Ave\",\n      \"address_two\": \"601\",\n      \"city\": \"Brooklyn\",\n      \"state\": \"NY\",\n      \"zipcode\": \"11205\",\n      \"country\": \"US\"\n    }\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"errors\": \"Invalid insurance option. Use '0', '1000', '2000', '3000', '4000', or '5000' (e.g., '2000' for $2,000 coverage, +$20/box).\"\n}"},{"id":"e917f85d-bfc5-882e-c878-81bb4be03149","name":"direct_to_revivn is a string","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"asset_retrieval\": {\n    \"direct_to_revivn\": \"true\",\n    \"payment_method\": \"earnings\",\n    \"insurance\": \"1000\",\n    \"asset\": {\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"model\": \"macbook pro\",\n      \"manufacturer\": \"apple\"\n    },\n    \"employee_label\": {\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"email\": \"jsmith@example.com\",\n      \"phone_number\": \"+15555555555\",\n      \"address\": \"23 Main St\",\n      \"address_two\": \"\",\n      \"city\": \"Rochester\",\n      \"state\": \"NY\",\n      \"zipcode\": \"14602\",\n      \"country\": \"US\"\n    },\n    \"return_recipient\": {\n      \"first_name\": \"Bob\",\n      \"last_name\": \"Smith\",\n      \"company\": \"Revivn\",\n      \"email\": \"bsmith@example.com\",\n      \"address\": \"147 Flushing Ave\",\n      \"address_two\": \"601\",\n      \"city\": \"Brooklyn\",\n      \"state\": \"NY\",\n      \"zipcode\": \"11205\",\n      \"country\": \"US\"\n    }\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"errors\": \"Invalid direct to revivn option. Supported values: true, false.\"\n}"},{"id":"c0b30828-c847-afe9-785b-6417df49d458","name":"missing employee_label field","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"asset_retrieval\": {\n    \"direct_to_revivn\": false,\n    \"payment_method\": \"earnings\",\n    \"insurance\": \"1000\",\n    \"asset\": {\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"model\": \"macbook pro\",\n      \"manufacturer\": \"apple\"\n    },\n    \"employee_label\": {\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"email\": \"jsmith@example.com\",\n      \"phone_number\": \"+15555555555\",\n      \"address\": \"23 Main St\",\n      \"address_two\": \"\",\n      \"city\": \"Rochester\",\n      \"state\": \"NY\",\n      \"country\": \"US\"\n    },\n    \"return_recipient\": {\n      \"first_name\": \"Bob\",\n      \"last_name\": \"Smith\",\n      \"company\": \"Revivn\",\n      \"email\": \"bsmith@example.com\",\n      \"address\": \"147 Flushing Ave\",\n      \"address_two\": \"601\",\n      \"city\": \"Brooklyn\",\n      \"state\": \"NY\",\n      \"zipcode\": \"11205\",\n      \"country\": \"US\"\n    }\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/asset_retrievals"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"value":"application/json","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n  \"errors\": \"Missing required employee_label fields: zipcode.\"\n}"}],"_postman_id":"e7e5eb09-e054-4a81-9332-c08578b29995"},{"name":"Get asset retrieval pricing","id":"025372e1-9dea-a803-4b78-b65411fd2b53","request":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/asset_retrievals/pricing?box_type=laptop&quantity=3&country=US&insurance_total_in_cents=0&virtual_pickup=false","description":"<h1 id=\"get-asset-retrieval-pricing\">Get Asset Retrieval Pricing</h1>\n<p>Returns the price of asset retrievals for your organization before you create them. All amounts are in cents.</p>\n<h2 id=\"parameters\">Parameters</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>parameter</th>\n<th>default</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>box_type</td>\n<td><code>laptop</code></td>\n<td><code>laptop</code>, <code>laptop_tablet</code>, <code>laptop_mobile</code>, <code>tablet</code>, <code>tablet_mobile</code>, <code>mobile_phone</code>, <code>desktop</code>, <code>monitor</code>, <code>bulk</code>. Do not send other values. Revivn does not reject them, but the price can be wrong.</td>\n</tr>\n<tr>\n<td>quantity</td>\n<td><code>1</code></td>\n<td>number of asset retrievals</td>\n</tr>\n<tr>\n<td>country</td>\n<td><code>US</code></td>\n<td><code>US</code> or <code>CA</code>. Also accepts <code>USA</code>, <code>United States</code>, <code>CAN</code>, and <code>Canada</code>. Revivn uses <code>US</code> for any other value.</td>\n</tr>\n<tr>\n<td>insurance_total_in_cents</td>\n<td><code>0</code></td>\n<td>number. Total insurance for all the asset retrievals.</td>\n</tr>\n<tr>\n<td>virtual_pickup</td>\n<td><code>false</code></td>\n<td>boolean</td>\n</tr>\n</tbody>\n</table>\n</div><p>Example: <code>GET /api/v1/asset_retrievals/pricing?box_type=laptop&amp;quantity=3&amp;country=US</code></p>\n<h2 id=\"response\">Response</h2>\n<p>The response has a <code>pricing</code> object.</p>\n<h3 id=\"per-item\">Per item</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>base_price_per_item_in_cents</td>\n<td>the price of one box for your organization</td>\n</tr>\n<tr>\n<td>service_fee_per_item_in_cents</td>\n<td><code>1000</code> if <code>virtual_pickup</code> is <code>true</code>, otherwise <code>0</code></td>\n</tr>\n<tr>\n<td>miscellaneous_fees_per_item_in_cents</td>\n<td><code>1000</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"totals\">Totals</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>base_price_in_cents</td>\n<td><code>quantity</code> × base price per item</td>\n</tr>\n<tr>\n<td>service_fee_in_cents</td>\n<td><code>quantity</code> × service fee per item</td>\n</tr>\n<tr>\n<td>miscellaneous_fees_in_cents</td>\n<td><code>quantity</code> × miscellaneous fees per item</td>\n</tr>\n<tr>\n<td>insurance_total_in_cents</td>\n<td>the value you sent</td>\n</tr>\n<tr>\n<td>discount_percentage</td>\n<td>the discount of your organization, for example <code>10</code> for 10%</td>\n</tr>\n<tr>\n<td>discount_in_cents</td>\n<td>the discount on the base price, fees, and insurance</td>\n</tr>\n<tr>\n<td>subtotal_in_cents</td>\n<td>base price + service fee + miscellaneous fees + insurance − discount</td>\n</tr>\n<tr>\n<td>tax_percentage</td>\n<td>the sales tax of your organization, for example <code>8.875</code>. <code>0</code> if no sales tax applies.</td>\n</tr>\n<tr>\n<td>tax_in_cents</td>\n<td>the tax on the subtotal, rounded up</td>\n</tr>\n<tr>\n<td>total_in_cents</td>\n<td>subtotal + tax</td>\n</tr>\n<tr>\n<td>waived_fees</td>\n<td><code>true</code> if <code>virtual_pickup</code> is <code>true</code> and <code>box_type</code> is not <code>desktop</code> or <code>monitor</code>. The totals in this response do not subtract waived fees.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Example: 3 laptop boxes at $85.00 each with a 10% discount:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th></th>\n<th>cents</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>base price (3 × 8500)</td>\n<td>25500</td>\n</tr>\n<tr>\n<td>miscellaneous fees (3 × 1000)</td>\n<td>3000</td>\n</tr>\n<tr>\n<td>discount (10% of 28500)</td>\n<td>−2850</td>\n</tr>\n<tr>\n<td>total</td>\n<td>25650</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","asset_retrievals","pricing"],"host":["https://api.revivn.dev"],"query":[{"key":"box_type","value":"laptop"},{"key":"quantity","value":"3"},{"key":"country","value":"US"},{"key":"insurance_total_in_cents","value":"0"},{"key":"virtual_pickup","value":"false"}],"variable":[]}},"response":[{"id":"90259f13-5f3e-2ea2-1726-1a45332eb0e4","name":"3 laptop boxes","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/asset_retrievals/pricing?box_type=laptop&quantity=3&country=US&insurance_total_in_cents=0&virtual_pickup=false","host":["https://api.revivn.dev"],"path":["api","v1","asset_retrievals","pricing"],"query":[{"key":"box_type","value":"laptop"},{"key":"quantity","value":"3"},{"key":"country","value":"US"},{"key":"insurance_total_in_cents","value":"0"},{"key":"virtual_pickup","value":"false"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"value":"application/json","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n  \"pricing\": {\n    \"base_price_in_cents\": 25500,\n    \"service_fee_in_cents\": 0,\n    \"miscellaneous_fees_in_cents\": 3000,\n    \"insurance_total_in_cents\": 0,\n    \"discount_percentage\": 10,\n    \"discount_in_cents\": 2850,\n    \"tax_percentage\": 0.0,\n    \"tax_in_cents\": 0,\n    \"subtotal_in_cents\": 25650,\n    \"total_in_cents\": 25650,\n    \"waived_fees\": false,\n    \"base_price_per_item_in_cents\": 8500,\n    \"service_fee_per_item_in_cents\": 0,\n    \"miscellaneous_fees_per_item_in_cents\": 1000\n  }\n}\n"},{"id":"37339f88-db6d-aa13-ef4b-5f9796e31af1","name":"1 laptop box with virtual pickup","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/asset_retrievals/pricing?box_type=laptop&quantity=1&country=US&virtual_pickup=true","host":["https://api.revivn.dev"],"path":["api","v1","asset_retrievals","pricing"],"query":[{"key":"box_type","value":"laptop"},{"key":"quantity","value":"1"},{"key":"country","value":"US"},{"key":"virtual_pickup","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"value":"application/json","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n  \"pricing\": {\n    \"base_price_in_cents\": 8500,\n    \"service_fee_in_cents\": 1000,\n    \"miscellaneous_fees_in_cents\": 1000,\n    \"insurance_total_in_cents\": 0,\n    \"discount_percentage\": 10,\n    \"discount_in_cents\": 1050,\n    \"tax_percentage\": 0.0,\n    \"tax_in_cents\": 0,\n    \"subtotal_in_cents\": 9450,\n    \"total_in_cents\": 9450,\n    \"waived_fees\": true,\n    \"base_price_per_item_in_cents\": 8500,\n    \"service_fee_per_item_in_cents\": 1000,\n    \"miscellaneous_fees_per_item_in_cents\": 1000\n  }\n}\n"}],"_postman_id":"025372e1-9dea-a803-4b78-b65411fd2b53"}],"id":"15189e5f-4e86-490f-b965-ba456cc5fde0","_postman_id":"15189e5f-4e86-490f-b965-ba456cc5fde0","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}},{"name":"webhook_subscriptions","item":[{"name":"List webhook subscriptions","id":"9f1c0ca0-4402-e56e-4e16-cd05e1fa40c0","request":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/webhook_subscriptions","description":"<h1 id=\"list-webhook-subscriptions\">List Webhook Subscriptions</h1>\n<p>Returns all webhook subscriptions of your organization, newest first. This endpoint does not use pagination.</p>\n<p>The response has a <code>webhook_subscriptions</code> array. See <strong>Create webhook subscription</strong> for the fields of each subscription.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","webhook_subscriptions"],"host":["https://api.revivn.dev"],"query":[],"variable":[]}},"response":[{"id":"66ae3b69-f3dd-5387-19ae-7aae97ab6074","name":"webhook subscriptions","originalRequest":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/webhook_subscriptions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"webhook_subscriptions\": [\n    {\n      \"uuid\": \"e115bfa0-bc04-42fe-9a60-1ad8c8eb96cf\",\n      \"event_name\": \"Pickup Complete\",\n      \"endpoint\": \"https://example.com/revivn/webhooks\",\n      \"description\": \"Notify our ITAM system\",\n      \"created_at\": \"2026-10-16T12:23:34.365Z\",\n      \"custom_headers\": {\n        \"X-Webhook-Secret\": \"my-shared-secret\"\n      },\n      \"request_type\": \"post\",\n      \"channel\": \"rest_api\",\n      \"created_by\": null\n    }\n  ]\n}\n"}],"_postman_id":"9f1c0ca0-4402-e56e-4e16-cd05e1fa40c0"},{"name":"Create webhook subscription","id":"b2e3dad7-1ab3-4cdb-2f6d-31e6b1aae399","request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"webhook_subscription\": {\n    \"event_name\": \"Pickup Complete\",\n    \"endpoint\": \"https://example.com/revivn/webhooks\",\n    \"request_type\": \"post\",\n    \"channel\": \"rest_api\",\n    \"description\": \"Notify our ITAM system\",\n    \"custom_headers\": \"{\\\"X-Webhook-Secret\\\": \\\"my-shared-secret\\\"}\"\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/webhook_subscriptions","description":"<h1 id=\"create-webhook-subscription\">Create Webhook Subscription</h1>\n<p>Creates a webhook subscription. Revivn then sends a request to <code>endpoint</code> each time the event happens. See the <strong>Webhooks</strong> folder for the events and their payloads.</p>\n<h2 id=\"body\">Body</h2>\n<p>Send the fields inside a <code>webhook_subscription</code> object:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"webhook_subscription\": {\n    \"event_name\": \"Pickup Complete\",\n    \"endpoint\": \"https://example.com/revivn/webhooks\",\n    \"request_type\": \"post\",\n    \"channel\": \"rest_api\",\n    \"description\": \"Notify our ITAM system\",\n    \"custom_headers\": \"{\\\"X-Webhook-Secret\\\": \\\"my-shared-secret\\\"}\"\n  }\n}\n</code></pre>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>required</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>event_name</td>\n<td>yes</td>\n<td>One of: <code>Pickup Scheduled</code>, <code>Pickup Initial Report Ready</code>, <code>Pickup On Hold</code>, <code>Pickup Complete</code>, <code>Donation Made</code>, <code>Retrieval Placed</code>, <code>Retrieval In Transit To Employee</code>, <code>Retrieval Delivered To Employee</code>, <code>Retrieval In Transit To Recipient</code>, <code>Retrieval Complete</code>, <code>Retrieval Cancelled</code>. Use the exact value, with the same spaces and capital letters.</td>\n</tr>\n<tr>\n<td>endpoint</td>\n<td>yes</td>\n<td>The URL that receives the requests</td>\n</tr>\n<tr>\n<td>request_type</td>\n<td>yes</td>\n<td><code>post</code> or <code>put</code></td>\n</tr>\n<tr>\n<td>channel</td>\n<td>no</td>\n<td><code>rest_api</code> (default) or <code>slack</code></td>\n</tr>\n<tr>\n<td>description</td>\n<td>no</td>\n<td>string</td>\n</tr>\n<tr>\n<td>custom_headers</td>\n<td>no</td>\n<td>A JSON object <strong>encoded as a string</strong>, for example <code>\"{\\\"X-Webhook-Secret\\\": \\\"abc\\\"}\"</code>. Revivn adds these headers to each request.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<p>Returns <code>201 Created</code> and the subscription:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>uuid</td>\n<td>string. Use it to delete the subscription or send a test.</td>\n</tr>\n<tr>\n<td>event_name</td>\n<td>string</td>\n</tr>\n<tr>\n<td>endpoint</td>\n<td>string</td>\n</tr>\n<tr>\n<td>request_type</td>\n<td><code>post</code> or <code>put</code></td>\n</tr>\n<tr>\n<td>channel</td>\n<td><code>rest_api</code>, <code>slack</code>, or <code>null</code> (same as <code>rest_api</code>)</td>\n</tr>\n<tr>\n<td>description</td>\n<td>string or <code>null</code></td>\n</tr>\n<tr>\n<td>custom_headers</td>\n<td>object or <code>null</code></td>\n</tr>\n<tr>\n<td>created_at</td>\n<td>date-time string</td>\n</tr>\n<tr>\n<td>created_by</td>\n<td>the user who created the subscription, or <code>null</code> if it was created with an API token</td>\n</tr>\n</tbody>\n</table>\n</div><p>Returns <code>422 Unprocessable Entity</code> if a field is not valid. <code>errors</code> has a list of messages for each field that is not valid:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": {\n    \"event_name\": [\"is not included in the list\"],\n    \"custom_headers\": [\"must be a JSON object\"]\n  }\n}\n</code></pre>\n<p>For example:</p>\n<ul>\n<li><code>event_name</code> is not one of the values above.</li>\n<li><code>request_type</code> is missing, or is not <code>post</code> or <code>put</code>.</li>\n<li><code>custom_headers</code> is not valid JSON, or is not a JSON object.</li>\n</ul>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","webhook_subscriptions"],"host":["https://api.revivn.dev"],"query":[],"variable":[]}},"response":[{"id":"102d44dd-05f2-a9f2-735b-acb541c72ff1","name":"webhook subscription created","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"webhook_subscription\": {\n    \"event_name\": \"Pickup Complete\",\n    \"endpoint\": \"https://example.com/revivn/webhooks\",\n    \"request_type\": \"post\",\n    \"channel\": \"rest_api\",\n    \"description\": \"Notify our ITAM system\",\n    \"custom_headers\": \"{\\\"X-Webhook-Secret\\\": \\\"my-shared-secret\\\"}\"\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/webhook_subscriptions"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"value":"application/json","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n  \"uuid\": \"e115bfa0-bc04-42fe-9a60-1ad8c8eb96cf\",\n  \"event_name\": \"Pickup Complete\",\n  \"endpoint\": \"https://example.com/revivn/webhooks\",\n  \"description\": \"Notify our ITAM system\",\n  \"created_at\": \"2026-10-16T12:23:34.365Z\",\n  \"custom_headers\": {\n    \"X-Webhook-Secret\": \"my-shared-secret\"\n  },\n  \"request_type\": \"post\",\n  \"channel\": \"rest_api\",\n  \"created_by\": null\n}\n"},{"id":"1c918bf3-e15c-b070-24cd-3e05975a0620","name":"invalid event name and custom headers","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"webhook_subscription\": {\n    \"event_name\": \"pickup_complete\",\n    \"endpoint\": \"https://example.com/revivn/webhooks\",\n    \"request_type\": \"post\",\n    \"custom_headers\": \"{\\\"X-Webhook-Secret\\\": \"\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/webhook_subscriptions"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"errors\": {\n    \"event_name\": [\n      \"is not included in the list\"\n    ],\n    \"custom_headers\": [\n      \"must be a JSON object\"\n    ]\n  }\n}\n"}],"_postman_id":"b2e3dad7-1ab3-4cdb-2f6d-31e6b1aae399"},{"name":"Delete webhook subscription","id":"0e7ee7f7-abc6-0228-6725-814af08a0952","request":{"method":"DELETE","header":[],"url":"https://api.revivn.dev/api/v1/webhook_subscriptions/:webhook_subscription_id","description":"<h1 id=\"delete-webhook-subscription\">Delete Webhook Subscription</h1>\n<p>Deletes a webhook subscription. Revivn stops sending requests for it.</p>\n<p>Set <code>webhook_subscription_id</code> to the <code>uuid</code> of the subscription.</p>\n<p>Returns <code>200 OK</code> with <code>{\"message\": \"deleted\"}</code>.</p>\n<p>Returns <code>404 Not Found</code> if your organization has no subscription with this <code>uuid</code>, or if the subscription is already deleted.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","webhook_subscriptions",":webhook_subscription_id"],"host":["https://api.revivn.dev"],"query":[],"variable":[{"id":"2e15fc88-d100-4370-b242-8abd330f0fe2","type":"any","value":"","key":"webhook_subscription_id"}]}},"response":[{"id":"d916b0e7-6fd5-a384-19ef-269e60049c7d","name":"webhook subscription deleted","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/webhook_subscriptions/:webhook_subscription_id","host":["https://api.revivn.dev"],"path":["api","v1","webhook_subscriptions",":webhook_subscription_id"],"variable":[{"key":"webhook_subscription_id","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"value":"application/json","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"deleted\"\n}\n"},{"id":"5e77abe9-af71-ae05-5ce3-a70c1fd3901d","name":"webhook subscription not found","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/webhook_subscriptions/:webhook_subscription_id","host":["https://api.revivn.dev"],"path":["api","v1","webhook_subscriptions",":webhook_subscription_id"],"variable":[{"key":"webhook_subscription_id","value":""}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": 404,\n  \"error\": \"Not Found\"\n}\n"}],"_postman_id":"0e7ee7f7-abc6-0228-6725-814af08a0952"},{"name":"Send test webhook","id":"6cf27286-1ef2-a1b2-b209-aa89f4134cde","request":{"method":"POST","header":[],"url":"https://api.revivn.dev/api/v1/webhook_subscriptions/:webhook_subscription_id/send_test","description":"<h1 id=\"send-test-webhook\">Send Test Webhook</h1>\n<p>Sends a sample payload for the event of the subscription to its <code>endpoint</code>, immediately. Use it to check that your endpoint receives and reads the request.</p>\n<p>Set <code>webhook_subscription_id</code> to the <code>uuid</code> of the subscription.</p>\n<p>The test request uses the same method, headers, and payload shape as a real event. The values in the payload are examples. See the <strong>Webhooks</strong> folder for the payloads.</p>\n<p>Returns <code>200 OK</code> with <code>{\"message\": \"test sent\"}</code> after Revivn sends the request. The response does not tell you which status code your endpoint returned.</p>\n<p>Returns <code>404 Not Found</code> if your organization has no subscription with this <code>uuid</code>.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","webhook_subscriptions",":webhook_subscription_id","send_test"],"host":["https://api.revivn.dev"],"query":[],"variable":[{"id":"b1b3f2d8-9a74-4bb2-b151-a7d14776a93a","type":"any","value":"","key":"webhook_subscription_id"}]}},"response":[{"id":"d0c80fa2-2632-0506-11d0-1a951f2a834f","name":"test sent","originalRequest":{"method":"POST","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/webhook_subscriptions/:webhook_subscription_id/send_test","host":["https://api.revivn.dev"],"path":["api","v1","webhook_subscriptions",":webhook_subscription_id","send_test"],"variable":[{"key":"webhook_subscription_id","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"message\": \"test sent\"\n}\n"},{"id":"9d85d84f-e8f4-b8a3-2f96-f1cd7f54985c","name":"webhook subscription not found","originalRequest":{"method":"POST","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/webhook_subscriptions/:webhook_subscription_id/send_test","host":["https://api.revivn.dev"],"path":["api","v1","webhook_subscriptions",":webhook_subscription_id","send_test"],"variable":[{"key":"webhook_subscription_id","value":""}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": 404,\n  \"error\": \"Not Found\"\n}\n"}],"_postman_id":"6cf27286-1ef2-a1b2-b209-aa89f4134cde"}],"id":"d2bf84cd-2827-e9fe-64a3-17851a522785","description":"<h1 id=\"webhooks\">Webhooks</h1>\n<p>A webhook subscription tells Revivn to send an HTTP request to your endpoint when an event happens to one of your pickups, asset retrievals, or donations.</p>\n<h2 id=\"events\">Events</h2>\n<p>Set <code>event_name</code> to one of these values when you create a subscription:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>event_name</th>\n<th>sent when</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Pickup Scheduled</td>\n<td>Revivn confirms the date of a pickup</td>\n</tr>\n<tr>\n<td>Pickup Initial Report Ready</td>\n<td>The initial report for a pickup is ready</td>\n</tr>\n<tr>\n<td>Pickup On Hold</td>\n<td>A pickup goes on hold, for example because a device is still enrolled in MDM</td>\n</tr>\n<tr>\n<td>Pickup Complete</td>\n<td>A pickup is complete</td>\n</tr>\n<tr>\n<td>Donation Made</td>\n<td>Your organization makes a donation</td>\n</tr>\n<tr>\n<td>Retrieval Placed</td>\n<td>An asset retrieval is placed. Use it to check the employee's shipping address before the box ships</td>\n</tr>\n<tr>\n<td>Retrieval In Transit To Employee</td>\n<td>The box for an asset retrieval is on its way to the employee</td>\n</tr>\n<tr>\n<td>Retrieval Delivered To Employee</td>\n<td>The employee received the box</td>\n</tr>\n<tr>\n<td>Retrieval In Transit To Recipient</td>\n<td>The employee shipped the box back and it is on its way to the return recipient</td>\n</tr>\n<tr>\n<td>Retrieval Complete</td>\n<td>The return recipient received the box and the asset retrieval is complete</td>\n</tr>\n<tr>\n<td>Retrieval Cancelled</td>\n<td>An asset retrieval is cancelled, through the API, in the Revivn app, or by the Revivn team</td>\n</tr>\n</tbody>\n</table>\n</div><p>Pickup events are not sent for virtual pickups.</p>\n<h2 id=\"delivery\">Delivery</h2>\n<ul>\n<li>Revivn sends the request about 60 seconds after the event.</li>\n<li>The request uses the <code>request_type</code> of the subscription (<code>post</code> or <code>put</code>).</li>\n<li>The request has the header <code>Content-Type: application/json</code>, plus any <code>custom_headers</code> you set on the subscription. Use a custom header, for example a shared secret, to confirm that a request comes from Revivn. Revivn does not sign requests.</li>\n<li>Return a <code>2xx</code> status code to acknowledge the event. Revivn does not resend an event when your endpoint returns an error status code.</li>\n<li>If the subscription <code>channel</code> is <code>slack</code>, set <code>endpoint</code> to a Slack incoming webhook URL. Revivn then sends a Slack message instead of the JSON payloads below.</li>\n</ul>\n<h2 id=\"payloads\">Payloads</h2>\n<h3 id=\"pickup-scheduled\">Pickup Scheduled</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"pickup\": {\n    \"id\": \"8b5e6a0e-3c1d-4f0e-9a51-0f6b1c2d3e4f\",\n    \"order_number\": \"A1B2C3D4\",\n    \"state\": \"scheduled\",\n    \"scheduled_date\": \"2026-11-16\",\n    \"confirmed_time\": \"9:00 AM\"\n  },\n  \"location\": {\n    \"address\": \"141 Flushing Ave\",\n    \"address2\": \"Suite 601\",\n    \"city\": \"Brooklyn\",\n    \"state\": \"NY\",\n    \"zipcode\": \"11205\"\n  },\n  \"contacts\": [\n    {\n      \"first_name\": \"John\",\n      \"last_name\": \"Doe\",\n      \"email\": \"john.doe@example.com\",\n      \"phone_number\": \"1231231234\",\n      \"point_of_contact_type\": \"main\"\n    }\n  ]\n}\n</code></pre>\n<h3 id=\"pickup-initial-report-ready\">Pickup Initial Report Ready</h3>\n<p><code>pickup.initial_report_url</code> is a signed link to the initial report PDF.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"pickup\": {\n    \"id\": \"8b5e6a0e-3c1d-4f0e-9a51-0f6b1c2d3e4f\",\n    \"order_number\": \"A1B2C3D4\",\n    \"state\": \"initial_report_ready\",\n    \"initial_report_url\": \"https://...\",\n    \"scheduled_date\": \"2026-11-16\",\n    \"confirmed_time\": \"9:00 AM\"\n  },\n  \"assets\": [\n    {\n      \"id\": \"1712dc93-6e23-47d6-9761-678b0e30c225\",\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"device_type\": \"laptop\",\n      \"manufacturer\": \"apple\"\n    }\n  ],\n  \"location\": {\n    \"address\": \"141 Flushing Ave\",\n    \"address2\": \"Suite 601\",\n    \"city\": \"Brooklyn\",\n    \"state\": \"NY\",\n    \"zipcode\": \"11205\"\n  }\n}\n</code></pre>\n<h3 id=\"pickup-on-hold\">Pickup On Hold</h3>\n<p><code>enrolled_status</code> is <code>enrolled</code> for each device that is still enrolled in MDM, and <code>null</code> for the other devices.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"pickup\": {\n    \"id\": \"8b5e6a0e-3c1d-4f0e-9a51-0f6b1c2d3e4f\",\n    \"order_number\": \"A1B2C3D4\",\n    \"state\": \"on_hold\",\n    \"scheduled_date\": \"2026-11-16\",\n    \"confirmed_time\": \"9:00 AM\"\n  },\n  \"assets\": [\n    {\n      \"id\": \"1712dc93-6e23-47d6-9761-678b0e30c225\",\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"device_type\": \"laptop\",\n      \"manufacturer\": \"apple\",\n      \"enrolled_status\": \"enrolled\"\n    }\n  ],\n  \"location\": {\n    \"address\": \"141 Flushing Ave\",\n    \"address2\": \"Suite 601\",\n    \"city\": \"Brooklyn\",\n    \"state\": \"NY\",\n    \"zipcode\": \"11205\"\n  }\n}\n</code></pre>\n<h3 id=\"pickup-complete\">Pickup Complete</h3>\n<p><code>pickup.cod_url</code> is a signed link to the certificate of destruction for the pickup. Each asset has its own <code>cod_url</code>.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"pickup\": {\n    \"id\": \"8b5e6a0e-3c1d-4f0e-9a51-0f6b1c2d3e4f\",\n    \"order_number\": \"A1B2C3D4\",\n    \"state\": \"complete\",\n    \"scheduled_date\": \"2026-11-16\",\n    \"confirmed_time\": \"9:00 AM\",\n    \"cod_url\": \"https://...\"\n  },\n  \"assets\": [\n    {\n      \"id\": \"1712dc93-6e23-47d6-9761-678b0e30c225\",\n      \"serial_number\": \"C02Z1BBUL333\",\n      \"device_type\": \"laptop\",\n      \"manufacturer\": \"apple\",\n      \"cod_url\": \"https://...\"\n    }\n  ],\n  \"location\": {\n    \"address\": \"141 Flushing Ave\",\n    \"address2\": \"Suite 601\",\n    \"city\": \"Brooklyn\",\n    \"state\": \"NY\",\n    \"zipcode\": \"11205\"\n  }\n}\n</code></pre>\n<h3 id=\"donation-made\">Donation Made</h3>\n<p><code>donation.date</code> uses the format <code>YYYY-MM-DD</code>.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"donation\": {\n    \"total_dollars_amount\": 6657,\n    \"performed_by\": \"donor@example.com\",\n    \"date\": \"2026-10-16\"\n  },\n  \"campaign\": {\n    \"organization\": \"Boys Hope Girls Hope of New York\",\n    \"description\": \"Getting laptops for our organization will support our staff...\"\n  }\n}\n</code></pre>\n<h3 id=\"asset-retrieval-events\">Asset retrieval events</h3>\n<p>The six <code>Retrieval</code> events use the same payload. <code>event_type</code> tells you which event it is:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>event_name</th>\n<th>event_type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Retrieval Placed</td>\n<td>order_placed</td>\n</tr>\n<tr>\n<td>Retrieval In Transit To Employee</td>\n<td>package_out_to_employee</td>\n</tr>\n<tr>\n<td>Retrieval Delivered To Employee</td>\n<td>package_received_by_employee</td>\n</tr>\n<tr>\n<td>Retrieval In Transit To Recipient</td>\n<td>package_out_to_final_destination</td>\n</tr>\n<tr>\n<td>Retrieval Complete</td>\n<td>order_completed</td>\n</tr>\n<tr>\n<td>Retrieval Cancelled</td>\n<td>order_cancelled</td>\n</tr>\n</tbody>\n</table>\n</div><p><code>asset_retrieval.state</code> is the state of the asset retrieval when Revivn sends the request. <code>asset_retrieval.completed_at</code> is <code>null</code> until the asset retrieval is complete.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"event_type\": \"order_completed\",\n  \"asset_retrieval\": {\n    \"id\": \"0f6b1c2d-3e4f-4a51-9c1d-8b5e6a0e3c1d\",\n    \"order_number\": \"DED5EC1A2B3C\",\n    \"state\": \"order_completed\",\n    \"completed_at\": \"2026-10-16T14:03:22.000Z\"\n  },\n  \"devices\": [\n    {\n      \"manufacturer\": \"apple\",\n      \"model\": \"MacBook Pro\",\n      \"serial_number\": \"C02Z1BBUL333\"\n    }\n  ],\n  \"employee\": {\n    \"name\": \"Jane Smith\",\n    \"address\": \"1 Main Street, New York, NY 10001\",\n    \"email\": \"employee@example.com\"\n  },\n  \"return_recipient\": {\n    \"name\": \"John Doe\",\n    \"address\": \"28201 E. Bonanza Street, South Park, CO 80440\",\n    \"email\": \"recipient@example.com\"\n  }\n}\n</code></pre>\n","_postman_id":"d2bf84cd-2827-e9fe-64a3-17851a522785","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}},{"name":"earnings","item":[{"name":"Get earnings","id":"d5774193-5975-79a3-ab82-2099c5d8de5d","request":{"method":"GET","header":[],"url":"https://api.revivn.dev/api/v1/earnings?page[number]=1&page[size]=25","description":"<h1 id=\"get-earnings\">Get Earnings</h1>\n<p>Returns the earnings balance of your organization and a paginated list of its published earnings transactions, newest first.</p>\n<h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>earnings_balance</td>\n<td>number, in cents. Total credits minus total debits.</td>\n</tr>\n<tr>\n<td>transactions</td>\n<td>array of transactions</td>\n</tr>\n<tr>\n<td>meta</td>\n<td><code>total_pages</code> and <code>count</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"transaction-variables\">Transaction variables</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>transaction</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>uuid</td>\n<td>string</td>\n</tr>\n<tr>\n<td>type</td>\n<td><code>::EarningsCredit</code> (adds to the balance) or <code>::EarningsDebit</code> (subtracts from the balance)</td>\n</tr>\n<tr>\n<td>description</td>\n<td>string</td>\n</tr>\n<tr>\n<td>amount_in_cents</td>\n<td>number. Always positive. <code>type</code> tells you whether it adds or subtracts. <code>0</code> if the transaction is waived.</td>\n</tr>\n<tr>\n<td>display_amount_in_cents</td>\n<td>number. The amount before a waiver.</td>\n</tr>\n<tr>\n<td>waived</td>\n<td>boolean</td>\n</tr>\n<tr>\n<td>published_at</td>\n<td>date-time string</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"parameters\">Parameters</h2>\n<h3 id=\"filtering\">Filtering</h3>\n<p>Use the same filter format as <strong>List assets</strong>: <code>filter[]=field,operator,value</code>.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>field</strong></th>\n<th><strong>type</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>pickup_id</td>\n<td>number. The <code>id</code> of a pickup from <strong>List pickups</strong>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Example: <code>filter[]=pickup_id,is,1234</code></p>\n<h3 id=\"pagination\">Pagination</h3>\n<p>Use pagination to navigate pages of collections.</p>\n<p><strong>page[size]</strong>: Defaults to 25. Max 200</p>\n<p><strong>page[number]</strong>: Defaults to 1.</p>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","earnings"],"host":["https://api.revivn.dev"],"query":[{"key":"page[number]","value":"1"},{"key":"page[size]","value":"25"}],"variable":[]}},"response":[{"id":"dfd71d5b-ef49-6f8b-beb5-5d4279ec4f64","name":"earnings","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.revivn.dev/api/v1/earnings?page[number]=1&page[size]=25","host":["https://api.revivn.dev"],"path":["api","v1","earnings"],"query":[{"key":"page[number]","value":"1"},{"key":"page[size]","value":"25"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"earnings_balance\": 20500,\n  \"transactions\": [\n    {\n      \"uuid\": \"8060f73c-70f7-4b01-a45e-bceed44c8553\",\n      \"type\": \"::EarningsDebit\",\n      \"description\": \"Asset retrieval 9F3A2C7B1E4D\",\n      \"amount_in_cents\": 0,\n      \"display_amount_in_cents\": 4500,\n      \"published_at\": \"2026-10-15T12:23:34.930Z\",\n      \"waived\": true\n    },\n    {\n      \"uuid\": \"7c7bd06d-e52d-4f83-a8b6-be1fb12df141\",\n      \"type\": \"::EarningsDebit\",\n      \"description\": \"Asset retrieval DED5EC1A2B3C\",\n      \"amount_in_cents\": 4500,\n      \"display_amount_in_cents\": 4500,\n      \"published_at\": \"2026-10-14T12:23:34.925Z\",\n      \"waived\": false\n    },\n    {\n      \"uuid\": \"b3c32389-b378-49bf-afdb-64d84d358c82\",\n      \"type\": \"::EarningsCredit\",\n      \"description\": \"Earnings for pickup A1B2C3D4\",\n      \"amount_in_cents\": 25000,\n      \"display_amount_in_cents\": 25000,\n      \"published_at\": \"2026-10-13T12:23:34.904Z\",\n      \"waived\": false\n    }\n  ],\n  \"meta\": {\n    \"total_pages\": 1,\n    \"count\": 3\n  }\n}\n"}],"_postman_id":"d5774193-5975-79a3-ab82-2099c5d8de5d"}],"id":"7afdb692-b0a4-a41e-7638-c3f91e477f18","_postman_id":"7afdb692-b0a4-a41e-7638-c3f91e477f18","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}},{"name":"addresses","item":[{"name":"Validate address","id":"8a77625b-3e77-a46a-ba2c-eca6e7829f65","request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"address\": {\n    \"address_line_1\": \"141 Flushing Ave\",\n    \"address_line_2\": \"Suite 601\",\n    \"city_locality\": \"Brooklyn\",\n    \"state_province\": \"NY\",\n    \"postal_code\": \"11205\",\n    \"country\": \"US\"\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/addresses/validate","description":"<h1 id=\"validate-address\">Validate Address</h1>\n<p>Checks that UPS can deliver to an address. Use it before you create an asset retrieval, to find address problems early. <strong>Create asset retrieval</strong> runs the same check on the employee address, and on the return recipient address unless <code>direct_to_revivn</code> is <code>true</code>.</p>\n<h2 id=\"body\">Body</h2>\n<p>Send the fields inside an <code>address</code> object:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"address\": {\n    \"address_line_1\": \"141 Flushing Ave\",\n    \"address_line_2\": \"Suite 601\",\n    \"city_locality\": \"Brooklyn\",\n    \"state_province\": \"NY\",\n    \"postal_code\": \"11205\",\n    \"country\": \"US\"\n  }\n}\n</code></pre>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>field</th>\n<th>type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>address_line_1</td>\n<td>string. The street address only. Put the city, state, and postal code in their own fields.</td>\n</tr>\n<tr>\n<td>address_line_2</td>\n<td>string, optional</td>\n</tr>\n<tr>\n<td>city_locality</td>\n<td>string</td>\n</tr>\n<tr>\n<td>state_province</td>\n<td>string, for example <code>NY</code></td>\n</tr>\n<tr>\n<td>postal_code</td>\n<td>string</td>\n</tr>\n<tr>\n<td>country</td>\n<td><code>US</code> or <code>CA</code>. Also accepts <code>USA</code>, <code>United States</code>, <code>CAN</code>, and <code>Canada</code>. Revivn uses <code>US</code> for any other value.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<p>Returns <code>200 OK</code> with an empty object <code>{}</code> if the address is valid.</p>\n<p>Returns <code>422 Unprocessable Entity</code> if the address is not valid. <code>errors</code> is a list of messages:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"errors\": [\n    {\n      \"code\": \"po_box_not_allowed\",\n      \"message\": \"UPS does not ship to PO Boxes. Please provide a physical street address.\",\n      \"type\": \"error\"\n    }\n  ]\n}\n</code></pre>\n<p>Examples of errors:</p>\n<ul>\n<li>The address could not be found or is not complete.</li>\n<li><code>po_box_not_allowed</code>: <code>address_line_1</code> is a PO Box. UPS does not deliver to PO Boxes.</li>\n<li><code>invalid_address_format</code>: <code>address_line_1</code> contains the city, state, or postal code.</li>\n</ul>\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}},"urlObject":{"path":["api","v1","addresses","validate"],"host":["https://api.revivn.dev"],"query":[],"variable":[]}},"response":[{"id":"6950d316-d1bb-4e3f-c042-a062c8c33d77","name":"valid address","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"address\": {\n    \"address_line_1\": \"141 Flushing Ave\",\n    \"address_line_2\": \"Suite 601\",\n    \"city_locality\": \"Brooklyn\",\n    \"state_province\": \"NY\",\n    \"postal_code\": \"11205\",\n    \"country\": \"US\"\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/addresses/validate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"value":"application/json","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{}\n"},{"id":"cc313333-f425-154e-b706-903a393a5c67","name":"PO Box","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"address\": {\n    \"address_line_1\": \"PO Box 123\",\n    \"address_line_2\": \"\",\n    \"city_locality\": \"Brooklyn\",\n    \"state_province\": \"NY\",\n    \"postal_code\": \"11205\",\n    \"country\": \"US\"\n  }\n}\n","options":{"raw":{"language":"json"}}},"url":"https://api.revivn.dev/api/v1/addresses/validate"},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"errors\": [\n    {\n      \"code\": \"po_box_not_allowed\",\n      \"message\": \"UPS does not ship to PO Boxes. Please provide a physical street address.\",\n      \"type\": \"error\"\n    }\n  ]\n}\n"}],"_postman_id":"8a77625b-3e77-a46a-ba2c-eca6e7829f65"}],"id":"eabecc58-3d75-4df8-74f7-9a3d65a84214","_postman_id":"eabecc58-3d75-4df8-74f7-9a3d65a84214","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}}],"id":"2127a7ae-2fbb-4fa7-978b-2d1044c9c587","_postman_id":"2127a7ae-2fbb-4fa7-978b-2d1044c9c587","description":"","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","id":"3a7eccbf-7f2b-40e5-81ad-b0dd48cfccfb","name":"Revivn API V1","type":"collection"}}}],"auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"clientId","value":""},{"key":"client_authentication","value":"<client_authentication>"},{"key":"clientSecret","value":""},{"key":"tokenName","value":"<token-name>"},{"key":"tokenRequestParams","value":"<token-request-params>"},{"key":"grant_type","value":"<grant_type>"}]}},"event":[{"listen":"prerequest","script":{"id":"2b6c5dae-8eb6-4981-abd5-c68e63ff0cbe","type":"text/javascript","requests":{},"exec":[""]}},{"listen":"test","script":{"id":"cbfc5a7d-6455-456a-afd4-6d114eb5f634","type":"text/javascript","requests":{},"exec":[""]}}],"variable":[{"key":"BASE_URL","value":"https://api.revivn.dev","description":"https://api.revivn.dev"},{"key":"CLIENT_ID","value":"","description":"OAuth 2.0 API Client ID Credential"},{"key":"CLIENT_SECRET","value":"","description":"OAuth 2.0 API Client Secret Credential"}]}