Orchid eBound API - Responses

Every response the eBound Transaction API can return, in two groups: pre-flight responses that reject a whole batch, and transactional responses that apply to a single transaction.

Published Jul 30, 2026 Updated Jul 30, 2026 35 views
API Documents eBound API

This reference lists every response the Orchid eBound™ Transaction API can return, so you can map each one to a handling rule in your POS or ERP integration. It is a companion to the Orchid eBound™ API Documentation, which covers authentication, transaction types, and payload structure.

Which endpoint to use

Important — the asynchronous endpoint is no longer supported. POST /api/transactions/queue, and the API feedback webhook that reported its outcomes, have been retired. All integrations must use the synchronous endpoint, POST /api/transactions. Everything else in this article describes that endpoint.

EndpointStatusHow you learn the outcome
POST /api/transactionsSynchronous — supportedThe response body contains a Result object for every transaction you submitted. Nothing else is required.
POST /api/transactions/queueAsynchronous — retiredNo longer supported. Previously returned an acknowledgement only, with the outcome delivered later to a webhook.

Authenticate with your API token. The supported endpoint reads the transaction type from a transactionType property on each transaction in the array — no additional headers are required.

The response format

The endpoint returns an array with one element per transaction you submitted. Each element is your original transaction echoed back, with a Result object added:

[{
  "...your original submitted fields...": "...",
  "transactionIdentifier": "T-099999-4567_1668086463",
  "Result": {
    "status":          "Complete-Sent",
    "received":        "2026-07-30T09:14:22",
    "processed":       "2026-07-30T09:14:23",
    "Results":         "Success",
    "transactionType": "Receive"
  }
}]
FieldMeaning
statusComplete-Sent when the transaction was written to the bound book, Failed-Sent when it was rejected.
ResultsSuccess on acceptance. On rejection, the reason or reasons — see the response tables below.
receivedWhen Orchid received the transaction.
processedWhen Orchid finished processing it.
transactionTypeThe transaction type Orchid resolved from your payload.
transactionIdentifierYour identifier, echoed back. If you do not supply one, Orchid generates a GUID. Send your own so you can reconcile responses to source records.

Three rules for handling responses

  • Do not branch on the HTTP status code. Once your request passes the pre-flight checks, a rejected transaction still returns HTTP 200. Always read Result.status.
  • Treat Results as display text, not parseable data. When a transaction fails more than one check, the reasons are joined with commas — and the messages themselves contain commas. Log and display the string; branch on status instead.
  • Batches are evaluated per transaction. Some elements of an array can succeed while others fail. Check every element, not just the first.

When a transaction is rejected because the serial number is not in an open disposition, the response adds a Result.AdditionalData.OpenDispositions list showing which entries are open for that serial number. Use it to correct and resubmit.

Messages below are reproduced exactly as the API returns them, so you can match on them directly.

Response type 1 — Pre-flight responses

These are returned before any transaction in your payload is examined, and they reject the entire batch — nothing is written. They are the only responses that use meaningful HTTP status codes, so they are worth handling separately from transaction failures.

ResponseHTTPWhat it means
The authentication token is required400No API token was supplied on the request.
Failed authentication403The token does not match an active FFL. Check the token and confirm the FFL is still active in your Orchid account.
No transactions were received, please verify that json data is well formed and not empty400The request body could not be read as a JSON array of transactions.
{"HasError": true, "message": "..."}200An unexpected processing error. Note the message and the transactionIdentifier values in the batch, then raise a support ticket — these are also captured in your API Error Log.

Response type 2 — Transactional responses

These appear in Result.Results for an individual transaction, always with Result.status set to Failed-Sent and an HTTP status of 200. The “Applies to” column shows which transaction types can produce each message.

Acceptance

ResponseWhat it means
SuccessThe transaction was committed to the bound book. Accompanied by status: "Complete-Sent".

Missing transaction data

Returned when the transaction object itself, or a required sub-object, could not be read.

Message returnedApplies to
Type indicated must be type available within system.All except Theft, Found, Destroy
Caliber/Gauge is required.All transaction types
Manufacturer is required.All transaction types
Model is required.All transaction types
No Firearm DataAll transaction types
Type is required.All transaction types
SKU is required.Found
FFL Information is required.Transfer
FFL Name is required.Transfer
FFL Number is required.Transfer
Physical Date appears to be incorrect.Transfer, Theft, Found, Destroy
Physical Date is required.Transfer, Theft, Found, Destroy
serial Number is required.Transfer, Theft, Found, Destroy

Firearm identity and specification

Validation of the item being recorded — manufacturer, model, type, calibre, serial number, and the optional NFA and SOT fields. Each message is returned with the SKU and serial number of the item that failed, so you can identify the offending row in a batch.

Message returnedApplies to
Caliber/Gauge may not be over 50 characters, including spaces.All except Theft, Found, Destroy
Country Of Manufacture is required when Importer is specified.All except Theft, Found, Destroy
Country of Manufacture may not be over 50 characters, including spaces.All except Theft, Found, Destroy
Department may not be over 50 characters, including spaces.All except Theft, Found, Destroy
Importer may not be over 50 characters, including spaces.All except Theft, Found, Destroy
Item No/SKU many not be over 50 characters, including spaces.All except Theft, Found, Destroy
Location may not be over 50 characters, including spaces.All except Theft, Found, Destroy
Manufacturer may not be over 70 characters, including spaces.All except Theft, Found, Destroy
Model may not be over 50 characters, including spaces.All except Theft, Found, Destroy
NFA Form Control Number many not be over 25 characters, including spaces.All except Theft, Found, Destroy
NFA Form Type indicated must be type available within system.All except Theft, Found, Destroy
Purpose indicated must be type available within system.All except Theft, Found, Destroy
Reportable 3310.12 value has to be value available within system.All except Theft, Found, Destroy
Serial Number is required.All except Theft, Found, Destroy
Serial Number may not be over 50 characters, including spaces.All except Theft, Found, Destroy
SOT Control Number many not be over 25 characters, including spaces.All except Theft, Found, Destroy
Sublocation may not be over 50 characters, including spaces.All except Theft, Found, Destroy
Type may not be over 50 characters, including spaces.All except Theft, Found, Destroy

Acquisition information

Applies to transaction types that bring an item into the bound book.

Message returnedApplies to
Acquired FFL may not be over 15 charactersReceive, Serialize, Assemble, Disassemble
Acquisition Address is required.Receive, Serialize, Assemble, Disassemble
Acquisition Address may not be over 250 characters, including spaces.Receive, Serialize, Assemble, Disassemble
Acquisition City is required.Receive, Serialize, Assemble, Disassemble
Acquisition City may not be over 50 characters, including spaces.Receive, Serialize, Assemble, Disassemble
Acquisition Country may not be over 50 characters, including spaces.Receive, Serialize, Assemble, Disassemble
Acquisition Date is required.Receive, Serialize, Assemble, Disassemble
Acquisition Name is required.Receive, Serialize, Assemble, Disassemble
Acquisition Name may not be over 150 characters, including spaces.Receive, Serialize, Assemble, Disassemble
Acquisition State is required.Receive, Serialize, Assemble, Disassemble
Acquisition State may not be over 50 characters, including spaces.Receive, Serialize, Assemble, Disassemble
Acquisition Zip is required.Receive, Serialize, Assemble, Disassemble
Acquisition Zip may not be over 50 characters, including spaces.Receive, Serialize, Assemble, Disassemble

Disposition information

Applies to transaction types that move an item out of the bound book.

Message returnedApplies to
Disposition Address is required.Exempt, Assemble, Disassemble
Disposition City is required.Exempt, Assemble, Disassemble
Disposition State is required.Exempt, Assemble, Disassemble
Disposition Zip is required.Exempt, Assemble, Disassemble
Disposed SOT may not be over 50 characters, including spaces.Transfer
Disposition FFL is required.Transfer
Disposed FFL may not be over 15 characters and may not include dashes or spaces.Transfer, Assemble, Disassemble
FFL Must be Valid as of Disposition Date.Transfer, Assemble, Disassemble
Cannot transfer; Serial number is not an open disposition.Transfer, Exempt, Assemble, Disassemble
Disposition Address may not be over 250 characters, including spaces.Transfer, Exempt, Assemble, Disassemble
Disposition City may not be over 50 characters, including spaces.Transfer, Exempt, Assemble, Disassemble
Disposition Country may not be over 50 characters, including spaces.Transfer, Exempt, Assemble, Disassemble
Disposition Date is required.Transfer, Exempt, Assemble, Disassemble
Disposition Date may not be before the acquisition date.Transfer, Exempt, Assemble, Disassemble
Disposition Name is required.Transfer, Exempt, Assemble, Disassemble
Disposition Name may not be over 250 characters, including spaces.Transfer, Exempt, Assemble, Disassemble
Disposition State may not be over 50 characters, including spaces.Transfer, Exempt, Assemble, Disassemble
Disposition Zip may not be over 50 characters, including spaces.Transfer, Exempt, Assemble, Disassemble
Is assigned to a 4473.Transfer, Exempt, Assemble, Disassemble

Book state and item availability

Returned when the item’s current state in the bound book does not permit the requested movement. These are the most common failures in live integrations and usually indicate the two systems have drifted out of step.

Message returnedApplies to
Cannot assemble the same item.Assemble
Disposition Date cannot be before the Acquisition Date.Destroy
Firearm is not acquired and can not be disposedDestroy
Firearm is already acquiredFound
This historical transaction already exists in the bound book.Receive
Cannot import; serial number already acquired.Receive, Serialize
Firearm is not acquired and cannot be marked as lostTheft
Is reserved for an online sale.Transfer, Exempt
Not all Serial Numbers are in Open DispositionTransfer, Exempt
Serial Number <serial number> not found.Transfer, Exempt
There was an issue updating disposition informationTransfer, Exempt

Inventory management location

Returned when the optional imDepartment, imLocation or imSublocation values cannot be matched to your configured hierarchy. The hierarchy resolves top-down, so a department must be valid before a location can be, and a location before a sublocation.

Message returnedApplies to
Company Id is invalidReceive, Serialize, Assemble, Disassemble
Deparment was not found.Receive, Serialize, Assemble, Disassemble
In order to get location, you must provide a valid department.Receive, Serialize, Assemble, Disassemble
In order to get sublocation, you must provide a valid location.Receive, Serialize, Assemble, Disassemble
Location was not found.Receive, Serialize, Assemble, Disassemble
Sublocation was not found.Receive, Serialize, Assemble, Disassemble

Related documentation

If a response in your logs is not listed here, or a transaction is rejected in a way you cannot explain, raise a ticket through the Orchid support portal with the transactionIdentifier and the full Result object.

Was this article helpful?

Thanks for your feedback!

More in eBound API

More in API Documents