Skip to content

↑↓ navigate ↵ open Ctrl↵ new tab esc close

Reference of the values accepted in the two capture channels. Applies to POST /capture/{token}/events and POST /capture/events.

FieldTypeLimitRequired
typestring (enum)see table belowYes
order_refstring100 charactersYes
event_idstring64 charactersYes in the browser, optional on the server
payloadobjectsee accepted fieldsNo
captured_atstring (ISO 8601)-No, and only the server channel uses it
merchant_idstring (UUID)-Server channel only

It is the order identifier in your system, and it is the only thing that links the event to a transaction. Rapid looks, within your company and the given merchant, for:

  1. a transaction with external_id equal to order_ref
  2. if not found, a transaction with order_number equal to order_ref

Always send the same value you used in external_id when creating the transaction. A wrong order_ref does not cause an error in the call: the event is accepted, finds no transaction and is discarded after the correlation window.

Event identifier, generated by you. It works as an idempotency key: resending the same event_id for the same merchant does not create duplicate evidence.

In the browser channel it is required (the snippet generates a UUID per event). In the server channel, if you omit it, Rapid generates one. Send your own whenever you might resend the same call, that is what guarantees idempotency.

Do not use : in event_id. The character is removed before internal use, which would make two different ids collide.

When the fact happened, in ISO 8601.

ChannelBehavior
Browserignored. Rapid records the time the event arrived
Serverused as sent. If omitted, the time of the call is used

If the fact happened before the call (a nightly batch process, for example), use the server channel and send captured_at.

ValueWhat it recordsBrowserServer
checkoutPurchase completion, with device dataYesYes
terms_acceptanceAcceptance of terms, policy or contractYesYes
access_logAccess to the product or the logged-in areaYesYes
usage_logActual use of the product or serviceYesYes
delivery_confirmationDelivery confirmedNoYes
scanTracking code scan in transitNoYes
delivery_gpsDelivery coordinateNoYes

The last three exist only in the server channel: they are facts of your operation, not of the buyer’s browser. Using them in the browser channel returns 422 invalid_type.

payload has a closed list of fields. A key outside the list is silently discarded, with no error, so check the spelling.

FieldTypeUse in
device_idstringcheckout
device_fingerprintstringcheckout
fpstringcheckout, indicates the origin of the identification (pro or fallback)
fp_request_idstringcheckout, required to validate the identification
urlstringterms_acceptance, access_log, usage_log
notestringany type
carrierstringdelivery_confirmation, scan
trackingstringdelivery_confirmation, scan
latnumberdelivery_gps
lngnumberdelivery_gps

Rules:

  • scalar values only (string, number, boolean). Objects and lists are discarded
  • a string over 512 characters returns 422 payload_too_large
  • a missing or empty payload is accepted

checkout is the only type that writes data directly to the transaction, and not just as an attached record. It fills in the transaction’s device and IP only when those fields are empty: an earlier capture is never overwritten.

What each channel can write:

Transaction dataBrowserServer
device_iddoes not writewrites
device_fingerprintonly with validated identificationwrites
ip_addressonly with validated identificationwrites

The difference exists because the browser token is publishable: anyone who has it can send events. Unvalidated data never touches the fields that back the defense.

Validated identification means: you sent fp_request_id and device_id in the payload, and Rapid confirmed the pair against Fingerprint on the server side. In that case the event also generates a device verification record, with bot, VPN and incognito window signals. Without fp_request_id, the event still counts as a record, just without the device part.

Each fp_request_id is valid for one transaction. The same pair reused in another order is treated as a replay and ignored.

The event can arrive before the transaction exists. It stays in the queue and is retried for about 68 hours, at increasing intervals. Once the window passes with no matching transaction, the event is discarded.

In practice: sending checkout at the exact moment of the purchase works, even if your routine only sends the transaction to Rapid hours later.