RetrieveITAssets.com

Asset Retrieval Platform

API & MCP Documentation

How to submit and track equipment-retrieval requests — by web form, REST API, CSV bulk upload, or MCP for AI agents.
RetrieveITAssets.com — a TimeSquared Concierge company · Confidential
Version 1.0 · Environment: staging · Base URL https://api.retrieveitassets.com
Support: [email protected]

Contents

1   Overview — four ways to submit a request
2   Authentication (OAuth 2.0 & API key)
3   The asset-movement request contract
4   REST API endpoints
5   CSV bulk upload
6   Web form intake
7   Webhooks (lifecycle events)
8   MCP — the Model Context Protocol server for AI agents
9   Errors & support

1   Overview — four ways to submit a request

Every equipment-retrieval (or delivery) request enters the platform through one of four channels. All four land in the same system of record, run through the same scheduling engine, and emit the same lifecycle webhooks.

ChannelWho uses itHow
Web formCorporate clients, concierge staffSign in to the portal → New request → fill the form (one request at a time).
REST APIClient IT systems (ServiceNow, Workday, etc.)POST /api/v1/requests/asset-movements with a Bearer token.
CSV bulkClients submitting many requests at onceDownload the template, fill rows, upload it in the portal or POST to the import endpoint.
MCPAI agents / assistantsConnect to the RIA MCP server; call the create_request / get_status tools (§8).
One contract, every channel. Web form, API, CSV and MCP all populate the same asset-movement contract described in §3. Learn the contract once and every channel follows the same field names and rules.

2   Authentication

The REST API and MCP server use OAuth 2.0 client-credentials (machine-to-machine). Web-form users authenticate with their own portal login; CSV uploads in the portal inherit that session.

2.1   Get a token

# OAuth 2.0 client credentials
POST https://auth.retrieveitassets.com/oauth/token
Content-Type: application/json

{
  "client_id": "YOUR_CLIENT_ID",
  "client_secret": "YOUR_CLIENT_SECRET",
  "audience": "YOUR_AUDIENCE",
  "grant_type": "client_credentials"
}
# Response
{ "access_token": "eyJ...", "token_type": "Bearer", "expires_in": 86400 }

Send it on every request: Authorization: Bearer YOUR_ACCESS_TOKEN

2.2   API-key fallback

If you were issued an API key instead of OAuth credentials, send it directly — no token exchange needed: X-Api-Key: YOUR_API_KEY

2.3   Your clientId

Every integration is assigned a numeric clientId. Always send it in the payload — credentials are authorized only for specific clientId values. An unauthorized value returns 403 client_mismatch.

3   The asset-movement request contract

movementType is required and is the contract-level discriminator for delivery vs. retrieval. Do not infer direction from the free-text requestDetails. Allowed values: retrieval, delivery.

shippingCode keeps its own existing meaning and is not the delivery/retrieval discriminator — only movementType sets direction.
FieldReq?Meaning
movementTypeyesretrieval or delivery.
employeeNameyesThe employee the equipment is picked up from / delivered to.
employeePhonerec.Used by the contact agent to reach the employee.
customerTrackingNumberoptYour own reference; echoed back on status and webhooks.
pickupAddress1 / pickupAddress2yesStreet of the pickup location.
pickupCity / pickupState / pickupZipyesZIP routes the request to a queue and timezone.
finalDestinationyesWhere the assets go (e.g. "RetrieveITAssets Concierge" for a retrieval).
requestDetailsrec.Free text: what to pick up, notes, access instructions.
clientIdyesYour assigned integration id.
sourceoptOriginating system label, e.g. ServiceNow, Workday.

4   REST API endpoints

POST /api/v1/requests/asset-movementsSubmit one or more asset-movement requests.
GET /api/v1/submissions/{submissionId}Check processing status of a submission.
GET /api/v1/submissions/latest?clientId={id}Latest submission for a client.
POST /api/v1/requests/{requestId}/cancelCancel a request (if state allows).
POST /api/v1/requests/{requestId}/cloneClone an existing request.
POST /api/v1/imports/customersImport / update employee (customer) records.

4.1   Submit a retrieval

POST /api/v1/requests/asset-movements
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
Idempotency-Key: 11111111-2222-3333-4444-555555555555

{
  "clientId": 95,
  "source": "ServiceNow",
  "items": [{
    "movementType": "retrieval",
    "employeeName": "Jane Smith",
    "employeePhone": "555-123-4567",
    "customerTrackingNumber": "RET-1001",
    "pickupAddress1": "123 Main St",
    "pickupCity": "Boston",
    "pickupState": "MA",
    "pickupZip": "02101",
    "finalDestination": "RetrieveITAssets Concierge",
    "requestDetails": "Pick up laptop, dock, and charger from employee home."
  }]
}

4.2   Async behavior

Submit → receive 202 Accepted with a submissionId → poll the status endpoint until processing completes.

{ "submissionId": "6c600f5ebe27427287...", "status": "Pending", "createdAt": "2026-04-30T14:00:00Z" }

4.3   Idempotency

Put a client-generated unique id (UUID) in the Idempotency-Key header per logical submission. Reuse the same key only when retrying the exact same submission. Do not use clientId or submissionId as the key.

5   CSV bulk upload

For submitting many requests at once. Download the template, one request per row, then upload it in the portal or POST it to the import endpoint.

GET /api/requests/template.csvDownload the bulk-request CSV template.
POST /api/requests/importUpload a filled CSV (multipart file) → bulk create.

5.1   Columns

The header row must be exactly:

movementType,employeeName,employeePhone,customerTrackingNumber,pickupAddress1,
pickupAddress2,pickupCity,pickupState,pickupZip,finalDestination,requestDetails,clientId,source

5.2   Example rows

movementType,employeeName,...,finalDestination,requestDetails,clientId,source
retrieval,Jane Smith,...,RetrieveITAssets Concierge,"Pick up laptop and dock.",95,ServiceNow
delivery,Taylor Quinn,...,"ModernIT, 123 XX Street",Deliver laptop to employee.,95,Workday

6   Web form intake

Signed-in portal users submit one request at a time through a guided form whose fields map one-to-one to the contract in §3. The form enforces the required fields and the retrieval/delivery choice before it will submit, so a web-form request is always contract-valid. On submit it creates the same request record as the API and CSV paths and returns a request number the user can track in the portal.

7   Webhooks — lifecycle events

The platform sends outbound webhooks as a request moves through its lifecycle. Delivery and retrieval share the same event catalog.

EventFires when
request.createdA request is accepted into the system of record.
request.pickup_completedThe concierge marks the pickup done.
request.shippedThe assets are shipped.
request.completedThe request is fully closed.
request.failedThe request could not be completed.

Security headers: X-T2-Signature, X-T2-Timestamp, X-T2-EventId. Validate the HMAC-SHA256 signature, enforce a replay window on the timestamp, and process idempotently by eventId. Status polling remains available for reconciliation alongside webhooks.

8   MCP — Model Context Protocol server

MCP is how AI agents talk to the platform. Instead of hand-writing HTTP calls, an assistant connects to the RIA MCP server, which exposes a small set of typed tools. The agent picks a tool, fills its inputs, and the server performs the same authenticated API call under the hood — with the same auth, the same contract, and the same guardrails as the REST API.

8.1   How it works

8.2   Tools exposed

ToolWhat it does
create_requestCreate one asset-movement request (the §3 contract as typed inputs).
bulk_create_requestsCreate many requests from a list (the CSV equivalent).
get_statusLook up a submission or request's current status.
list_requestsList a client's requests, filterable by status — read-only.
cancel_requestCancel a request where its state allows (guarded).

8.3   Guardrails

Every MCP tool runs under the same scoped credential as the API: it can only touch data for its authorized clientId, read-only tools cannot write, and write tools that change state (cancel) are permission-gated. The MCP server never exposes credentials, accounting, or delete operations.

9   Errors & support

StatusMeaning
400Validation failure — e.g. missing movementType or a required address field.
401Missing or invalid bearer token / API key.
403Missing scope, unauthorized clientId, or unauthorized source.
404Unknown submissionId or requestId.
409Action not allowed for the request's current state.
RetrieveITAssets.com — a TimeSquared Concierge company · Confidential API & MCP documentation · v1.0
Base URL https://api.retrieveitassets.com · Auth https://auth.retrieveitassets.com · Support [email protected]