Skip to main content
Skip table of contents

REST Services Endpoints

API Endpoint Summary

Quick-reference table of every endpoint.

The snippets below are not executable code, they are for reference purposes only.

System & Configuration

Method

Endpoint

Description

GET

/api/Test

Test connection (no auth)

GET

/api/ServerTime

Get server UTC time

GET

/api/Tab

Get all item types (tabs)

GET

/api/Tab/{id}

Get a single tab by ID

GET

/api/Tab?itemtypefilter={filter}

Get filtered tabs

GET

/api/Action/{TabId}

Get available actions for a tab

POST

/api/dictionary

Get data dictionary fields

Item Operations

Method

Endpoint

Description

GET

/api/item/{id}

Get item by ID (IRItem format)

GET

/api/viewurl/{id}

Get web UI URL for item

POST

/api/itemsearch

Search items (non-paged)

POST

/api/itemsearch/paged

Search items (paged)

POST

/api/item

Create or update items

DELETE

/api/item/{id}

Delete item

GET

/api/sitem/{id}

Get item by ID (IRSItem format)

POST

/api/sitemsearch

Search items (IRSItem, paged)

POST

/api/sitem

Create or update items (IRSItem)

DELETE

/api/sitem/{id}

Delete item (IRSItem)

History & Transfers

Method

Endpoint

Description

POST

/api/itemhistory/search

Search item history

GET

/api/itemhistory/item/{id}

History by item ID

GET

/api/itemhistory/barcode/{barcode}

History by barcode

POST

/api/transfer

Transfer items to a location

POST

/api/transferbatch

Batch transfer to multiple locations

Checkout Requests

Method

Endpoint

Description

GET

/api/Request

Get all requests

GET

/api/Request/{id}

Get request by ID

POST

/api/Request

Create checkout request

PUT

/api/Request/{id}

Update request (approve/fulfill/reject)

DELETE

/api/Request/{id}

Delete request

POST

/api/requestsearch

Search requests

Data Import & File Operations

Method

Endpoint

Description

GET

/api/getInterchangeProfiles

Get all import profiles

GET

/api/getIsProfileForEdocs?ProfileID={id}

Check if the profile is for edocs

GET

/api/getfields?intID={id}

Get field mappings for profile

POST

/api/import

Trigger data import

POST

/api/sendChunks

Upload file in chunks

POST

/api/GetLogErrorFile

Retrieve import log/error file

Lists, Relationships & Utilities

Method

Endpoint

Description

GET

/api/lists/{tableName}

Get all list items

GET

/api/lists/{tableName}/{id}

Get list item by ID

GET

/api/lists/{tableName}/metadata

Get list metadata

POST

/api/manytomany

Create many-to-many relationship

DELETE

/api/manytomany

Delete many-to-many relationship

POST

/api/ClearManytoManyCache

Clear M2M cache

GET

/api/picklist/{TabId}

Get picklist for item type

GET

/api/labelprofiles/{TabId}

Get label profiles for item type

Tab Controller (Item Types)

Retrieves metadata about Gimmal Physical Tabs (item types).

GET /api/Tab

Returns all tabs defined in the system.

GET /api/Tab/{id}

Returns a single tab by its ID.

GET /api/Tab?itemtypefilter={filter}

Returns a filtered subset. Values: picklist (requestable items that can be contained) or topshelfuser (top-level, user, or shelf items).

IRTab Response Fields

Property

Type

Description

Id

integer

Tab ID (this is the TabId you pass to other endpoints)

SingularName

string

Singular display name (e.g., "Box")

PluralName

string

Plural display name (e.g., "Boxes")

IsMoveable

Boolean

Whether items can be transferred

IsRequestable

Boolean

Whether items can be checked out

AutoGenerateBarcode

Boolean

Whether barcodes are auto-generated

IsBarcodeRequired

Boolean

If false, likely a logical tab

BarcodePrefix

string

Prefix for auto-generated barcodes

BarcodeLength

integer

Length of auto-generated barcodes

IsEdoc

Boolean

Electronic document tab

DisplayOrder

integer

Display order in UI

IsRetentionEnabled

Boolean

Whether retention schedules apply

SpecialType

integer

Special type identifier

Example: Get All Tabs

CODE
GET "http://your-server/api/Tab" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ="
CODE
[
  {
    "Id": 201, "SingularName": "Location", "PluralName": "Locations",
    "IsMoveable": false, "IsRequestable": false, "AutoGenerateBarcode": true,
    "BarcodePrefix": "LOC", "BarcodeLength": 10, "IsEdoc": false
  },
  {
    "Id": 202, "SingularName": "Box", "PluralName": "Boxes",
    "IsMoveable": true, "IsRequestable": true, "AutoGenerateBarcode": true,
    "BarcodePrefix": "BOX", "BarcodeLength": 10, "IsEdoc": false
  }
]

Action Controller

Retrieves available actions for a given item type. Actions represent operations such as transfer, checkout, or custom workflows.

GET /api/Action/{TabId}

IRAction Response Fields

Property

Type

Description

Action

string

Name of the action

Caption

string

Human-readable caption

UrlCommand

string

URL command identifier (for mobile clients)

PostObject

string

Object to include as POST body

AssociatedTabId

integer

Associated tab ID (if applicable)

AssociatedTabName

string

Associated tab name

AssociatedColumnName

string

Associated column name

Example
CODE
GET "http://your-server/api/Action/202" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ="

Dictionary Controller

Queries the data dictionary to retrieve field definitions for item types. Essential for building dynamic forms.

POST /api/dictionary

Request Body

Parameter

Type

Required

Description

TabId

integer

Yes

Item type ID

SpecialSearch

string

Yes

"quicksearch", "simple", or "view"

SpecialSearch Options

Value

Description

quicksearch

Fields visible in quick search, sorted by display order, respecting role-based visibility

simple

Returns only BARCODE, QUICK_DESCRIPTION, and ITEM_TYPE_ID

view

All fields visible on the item view page, including FK output columns

Example Request & Response
CODE
POST "http://your-server/api/dictionary" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  -H "Content-Type: application/json" \
  -d '{ "TabId": 202, "SpecialSearch": "quicksearch" }'
CODE
[
  { "Caption": "Barcode",     "ColumnName": "BARCODE",           "ID": "101" },
  { "Caption": "Description", "ColumnName": "QUICK_DESCRIPTION", "ID": "102" },
  { "Caption": "Department",  "ColumnName": "DEPT_NAME_ALIAS",   "ID": "304$DEPT_NAME" }
]

For FK output columns, the ID field uses the format {FKDictionaryColumnID}${OutputFieldName}.

Item Controller

The primary controller for item operations using the full IRItem format with column metadata.

Get Item by ID

GET /api/item/{id}

Example Request & Response
CODE
GET "http://your-server/api/item/12345" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ="
CODE
{
  "columns": [
    { "ColumnName": "I_ID",             "Caption": "Item ID",    "Value": 12345, "Type": "System.Int32" },
    { "ColumnName": "I_BARCODE_STRING", "Caption": "Barcode",    "Value": "BOX001", "Type": "System.String" },
    { "ColumnName": "QUICK_DESCRIPTION","Caption": "Description","Value": "Box of Financial Records", "Type": "System.String" },
    { "ColumnName": "I_IT_ID",          "Caption": "Item Type",  "Value": 202,   "Type": "System.Int32" }
  ],
  "TabSingularName": "Box",
  "EdocFile": null,
  "ContentType": null,
  "RoutingEnabled": false,
  "QuickDescription": "Box of Financial Records",
  "Barcode": "BOX001",
  "TabId": 202
}

Get Item View URL

GET /api/viewurl/{ItemId}

Returns the web application URL for viewing a specific item in the Gimmal Physical UI.

CODE
GET "http://your-server/api/viewurl/12345" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ="
→ "https://hostname.gimmal.com/ItemView.aspx?id=12345"

Search Items (Non-Paged)

POST /api/itemsearch

Request Body

Parameter

Type

Required

Description

SpecialSearch

string

No

"like", "none", "missing", "topshelfuser", "keyword", "mycontents"

TabId

integer

Yes*

Item type ID (*not required for mycontents or barcode search)

Barcode

string

No

Barcode for lookup, or keyword for keyword search

SearchTerms

object

No

Dictionary of field name → value pairs

IncludeEdocFile

Boolean

No

Include a base64-encoded edoc file

ViewDisplay

Boolean

No

Return only view-page fields

GetForeignKeyDesc

Boolean

No

Return descriptive text for FKs

LastSyncDate

datetime

No

For topshelfuser: items after this date

SpecialSearch Reference

Value

Behavior

none

Exact match on SearchTerms, or barcode lookup if Barcode is provided

like

SQL LIKE search — use % wildcards

missing

All items marked as missing for the given TabId

topshelfuser

Top-level, user, and shelf items (for mobile sync)

keyword

Global keyword search across all fields

mycontents

All items checked out to the authenticated user

Limitation: You cannot use this endpoint to search using a Range Field.

Example: Search by Barcode
CODE
POST "http://your-server/api/itemsearch" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  -H "Content-Type: application/json" \
  -d '{ "SpecialSearch": "none", "Barcode": "BOX001" }'
Example: LIKE Search by Description
CODE
POST "http://your-server/api/itemsearch" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  -H "Content-Type: application/json" \
  -d '{
    "SpecialSearch": "like",
    "TabId": 202,
    "SearchTerms": { "QUICK_DESCRIPTION": "Financial%" }
  }'

Paged Search

POST /api/itemsearch/paged

Same parameters as /api/itemsearch plus:

Parameter

Type

Default

Description

PageNumber

integer

1

1-based page number

PageSize

integer

50

Items per page (max 100)

Paged Response Envelope
CODE
{
  "Items": [ /* array of IRItem objects */ ],
  "PageNumber": 1, "PageSize": 50, "TotalCount": 150,
  "TotalPages": 3, "HasNextPage": true, "HasPreviousPage": false
}
  • Page numbers are 1 based, not 0 based. Requesting PageNumber: 0 may return unexpected results.

  • For like, none, and missing searches, paging is at the database level.

  • For topshelfuser, keyword, and mycontents, results are fetched first, then paged in memory.

Create / Update Items

POST /api/item

Accepts an array of items. Include I_ID column to update; omit it to create. When creating, provide an IRColumn entry for each required field.

Key Columns

Column

Purpose

I_ID

Item ID — include for updates, omit for creates

I_IT_ID

Item Type ID — required for creation

I_BARCODE_STRING

Barcode — auto-generated if omitted

QUICK_DESCRIPTION

Item description

I_CURRENT_CONT_ITEM_ID

Current Location ID

EdocFile

Base64-encoded file content (edoc items)

ContentType

MIME type of the edoc file

I_E_USER_FILE_NAME

Filename — required when EdocFile is provided

For updates, put I_ID in the columns array, not in IRItem.Id. Putting the ID in the wrong place creates a new item instead of updating!

Example: Create a New Item
CODE
POST "http://your-server/api/item" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  -H "Content-Type: application/json" \
  -d '[{
    "columns": [
      { "ColumnName": "I_IT_ID", "Value": 202 },
      { "ColumnName": "QUICK_DESCRIPTION", "Value": "New Box of Records" },
      { "ColumnName": "I_ID", "Value": 100 }
    ]
  }]'
CODE
{
  "Result": true,
  "Message": "1 items successful",
  "ItemResults": [
    { "Result": true, "ItemBarcode": "BOX100", "ItemId": 12346, "Message": null }
  ]
}

Delete Item

DELETE /api/item/{id}

Sets I_Deleted to true. Validates: user has delete rights, item has no contents, item has no children.

Example
CODE
DELETE "http://your-server/api/item/12345" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ="
CODE
{ "Result": true, "ItemBarcode": "BOX001", "ItemDescription": "Box of Records", "Message": null }

Simplified Item Controller (SItem)

Same functionality as the Item Controller but uses the compact IRSItem format.

GET /api/sitem/{id}

CODE
{
  "cols": [
    { "n": "I_ID",             "v": 12345 },
    { "n": "I_BARCODE_STRING", "v": "BOX-001" },
    { "n": "QUICK_DESCRIPTION","v": "Financial Records 2024" }
  ],
  "EdocFile": null, "ContentType": null
}

POST /api/sitemsearch

Supports all SpecialSearch types plus "advanced" with wildcards (*, ?) and operators (>=, <=, !=).

POST /api/sitem

Add I_ID to update an item; do not include I_ID to create a new item.

DELETE /api/sitem/{id}

Delete an item. Same validation rules as Item Controller.

Item History Controller

Retrieves audit trail records for items.

POST /api/itemhistory/search

Parameter

Type

Required

Description

ItemTypeId

integer

Yes

Item type to search

ItemBarcode

string

No

Filter by barcode

UserDescription

string

No

Filter by user name

ActionType

string

No

CREATE, UPDATE, DELETE, TRANSFER, CHECKIN, CHECKOUT, MOVE, MARK_MISSING, MARK_FOUND

DateFrom / DateTo

datetime

No

Date range (inclusive)

PageNumber

integer

No

Default: 1

PageSize

integer

No

Default: 50, Max: 1000

SortField

string

No

Default: IH_DATE

SortDescending

Boolean

No

Default: true

GET /api/itemhistory/item/{itemId}

GET /api/itemhistory/barcode/{barcode}

Key History Record Fields

Field

Description

IH_DATE

Timestamp (user's time zone)

IH_ACTION_TYPE

Action type string

IH_USER_DESCRIPTION

Full name of user

IH_ACTION_SOURCE

Source (Web, API, Import)

IH_ACTION_DISPLAY

Formatted display text

Example: Get History by Barcode
CODE
GET "http://your-server/api/itemhistory/barcode/BOX001" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ="

Transfer Controller

Moves items to new locations with validation and audit trail support.

POST /api/transfer

Example Request & Response
CODE
POST "http://your-server/api/transfer" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  -H "Content-Type: application/json" \
  -d '{
    "Location": "0000000208",
    "Items": ["0000000201", "0000000202"],
    "CirculationRoute": "",
    "Comments": ""
  }'
CODE
{
  "Message": "2 transferred to 0000000208",
  "Result": true,
  "ItemResults": [
    {
      "LocationBarcode": "0000000208", "LocationDescription": "Warehouse A",
      "ItemId": 12345, "ItemBarcode": "0000000201",
      "ItemDescription": "Financial Records 2024",
      "Result": true, "Reason": 0, "Message": null
    },
    {
      "LocationBarcode": "0000000208", "LocationDescription": "Warehouse A",
      "ItemId": 12346, "ItemBarcode": "0000000202",
      "ItemDescription": "HR Files 2024",
      "Result": true, "Reason": 0, "Message": null
    }
  ]
}

POST /api/transferbatch

Accepts an array of transfer requests for multiple locations in one call.

Transfer Reason Codes

Code

Name

Description

0

Success

Transfer completed

1

FailedLocationCannotContainItem

Container rule violation

2

FailedLocationBarcodeNotFound

Location barcode invalid

3

FailedItemBarcodeNotFound

Item barcode invalid

4

FailedItemNotMoveable

The item is non-moveable

5

FailedUnknownReason

General failure (often security)

6

MandatoryFieldMissing

Required field is empty

Transfer Process: Validate location → Validate items → Security check → Container validation → Moveability check → Update location → Clear missing flag → Create circulation history → Save → Return results.

Transfers can partially succeed. The overall Result is false if any item fails, but items that succeeded are still saved. Always check individual ItemResults.

Request Controller (Checkout Requests)

Manages the item checkout workflow: request → approve → fulfill → return.

GET /api/Request

Returns all checkout requests. Empty response if none exist.

GET /api/Request/{id}

Returns a single request by ID.

POST /api/Request

Creates a new checkout request.

Property

Type

Required

Description

ItemId

integer

Yes

ID of the item being requested

RequestType

integer

Yes

1 = Delivery, 2 = Pickup, 4 = Renew

DestinationItemId

integer

No

Destination user/location (auto-selected if omitted)

Comment

string

No

Comment

Example: Create a Delivery Request
CODE
POST "http://your-server/api/Request" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  -H "Content-Type: application/json" \
  -d '{ "ItemId": 40000, "RequestType": 1, "DestinationItemId": 201 }'
CODE
{
  "Request": { "Id": 500, "ItemId": 40000, "RequestType": 1, "Status": 0, ... },
  "ItemBarcode": "FILE-001",
  "ItemDescription": "Personnel File",
  "Message": null,
  "Result": true
}

PUT /api/Request/{id}

Updates an existing request. Status is required in the body.

Status Value

Meaning

1

Approved

2

Fulfilled

3

Rejected

5

Deleted

Example: Fulfill a Request
CODE
PUT "http://your-server/api/Request/500" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" \
  -H "Content-Type: application/json" \
  -d '{ "Status": 2, "DestinationItemId": 201 }'

DELETE /api/Request/{id}

Deletes a request. Returns HTTP status "OK" on success.

POST /api/requestsearch

Advanced search for requests.

Property

Type

Description

OnlyMine

Boolean

Only the current user's requests

Report

integer

1 = Approved (picklist), 2 = Fulfilled (pickup report)

TabId

integer

Filter by item type

GetDescriptions

Boolean

Include item/destination descriptions

Interchange Controller (Data Import)

GET /api/getInterchangeProfiles

Returns all import profiles with configuration (delimiter, text qualifier, type).

Interchange Types

ID

Type

Behavior

1

Add

Creates new only; errors on key match

2

Modify

Updates existing only; errors on no match

3

Add/Modify

Creates or updates based on key fields

4

Request

Creates requests instead of items

GET /api/getIsProfileForEdocs?ProfileID={id}

Returns Boolean — is this profile for electronic documents?

GET /api/getfields?intID={id}

Returns field mappings (which import columns map to which Gimmal fields).

POST /api/import

Triggers an async import. File must already exist on the server.

CODE
{
  "InterchangeProfileID": 1,
  "FileName": "boxes_import_20240223.csv",
  "QueueLabels": true,
  "Email": "admin@example.com",
  "ImportSpecName": "Box Import - February 2024"
}

Important: File must exist at {InfolinxTempFolder}\Interchange\{FileName}. Use /api/sendChunks to upload it first. Imports run as background jobs — you'll get an email when done.

IO Controller (File Operations)

POST /api/sendChunks

Uploads files in chunks.

FileLocationType

Name

Save Path

1

Edoc

{EdocFolder}\{sequence}\

2

Interchange

{TempFolder}\Interchange\

3

Label

{TempFolder}\Labels\

4

Report

{TempFolder}\Reports\

For Interchange files, the server renames the file with a sequence prefix: IX_{sequence}_{filename}. You must use the filename from the first chunk's response for all subsequent chunks, or they'll go to a different file.

POST /api/GetLogErrorFile

Retrieves import log (.log) or error (.errors) files in chunks.

Files older than 1 hour are auto-cleaned after retrieval.

Chunk Size Recommendations

File Size

Chunk Size

< 1 MB

Single chunk

1–10 MB

1 MB

10–100 MB

1–2 MB

> 100 MB

5 MB

Lists Controller

GET /api/lists/{tableName}

All items from a list table.

GET /api/lists/{tableName}/{id}

Specific list item by ID.

GET /api/lists/{tableName}/metadata

Metadata about the list table.

Response Structure
CODE
{
  "Id": "en-US_100", "Value": "Warehouse A - Shelf 1",
  "DisplayText": "Warehouse A - Shelf 1", "ParentId": "10",
  "TableName": "LOCATION", "SecuredId": 0,
  "AdditionalFields": { "L_BARCODE_STRING": "LOC-A-001", "L_IT_ID": 5 }
}

Localization: List IDs are prefixed with language code (e.g., en-US_100).

Common List Tables

Table

Description

Hierarchical

LOCATION

Physical locations

Yes

DEPARTMENT

Departments

No

ROLE

User roles

No

ITEM_TYPE

Item types

No

RETENTION_SCHEDULE

Retention schedules

No

CLASSIFICATION

Classifications

No

MEDIA_TYPE

Media types

No

CONTAINER_TYPE

Container types

No

Many-to-Many Controller

POST /api/manytomany

Creates a many-to-many relationship using string values.

CODE
{ "ManyToManyTableId": 123, "ItemValue": "John Doe", "ListValue": "Active" }

DELETE /api/manytomany

Deletes a relationship using the same identifiers.

POST /api/ClearManytoManyCache

Clear server-side cache after bulk operations.

Picklist Controller

GET /api/Picklist/{TabId}

Returns picklist rows for the specified item type.

Property

Type

Description

Columns

Dictionary

Key-value pairs of picklist data

QuickDescription

string

Item description

Id

integer

Item ID

TabId

integer

Tab ID

Label Profiles

GET /api/labelprofiles/{TabId}

Returns label queue profiles for the specified item type.

Property

Type

Description

Name

string

Profile name

Id

integer

Profile ID

VendorId

integer

Vendor ID

Server Time

GET /api/ServerTime

Returns the server's current UTC time as a string. Useful for synchronizing client timestamps.

CODE
GET "http://your-server/api/ServerTime" \
  -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ="
→ "2026-02-23T15:30:00Z"
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.