curl --request POST \
--url https://api.arcuserp.com/v1/serials/capture-partial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"raw_barcodes": [
"<string>"
],
"serial_numbers": [
"<string>"
],
"lot_number": "<string>",
"expiry_date": "2023-12-25",
"notes": "<string>",
"source": "<string>"
}
'import requests
url = "https://api.arcuserp.com/v1/serials/capture-partial"
payload = {
"package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"raw_barcodes": ["<string>"],
"serial_numbers": ["<string>"],
"lot_number": "<string>",
"expiry_date": "2023-12-25",
"notes": "<string>",
"source": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
package_item_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
product_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
package_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
raw_barcodes: ['<string>'],
serial_numbers: ['<string>'],
lot_number: '<string>',
expiry_date: '2023-12-25',
notes: '<string>',
source: '<string>'
})
};
fetch('https://api.arcuserp.com/v1/serials/capture-partial', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcuserp.com/v1/serials/capture-partial",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'package_item_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'product_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'package_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'raw_barcodes' => [
'<string>'
],
'serial_numbers' => [
'<string>'
],
'lot_number' => '<string>',
'expiry_date' => '2023-12-25',
'notes' => '<string>',
'source' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/serials/capture-partial"
payload := strings.NewReader("{\n \"package_item_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"product_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"package_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"raw_barcodes\": [\n \"<string>\"\n ],\n \"serial_numbers\": [\n \"<string>\"\n ],\n \"lot_number\": \"<string>\",\n \"expiry_date\": \"2023-12-25\",\n \"notes\": \"<string>\",\n \"source\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.arcuserp.com/v1/serials/capture-partial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"package_item_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"product_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"package_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"raw_barcodes\": [\n \"<string>\"\n ],\n \"serial_numbers\": [\n \"<string>\"\n ],\n \"lot_number\": \"<string>\",\n \"expiry_date\": \"2023-12-25\",\n \"notes\": \"<string>\",\n \"source\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/serials/capture-partial")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"package_item_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"product_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"package_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"raw_barcodes\": [\n \"<string>\"\n ],\n \"serial_numbers\": [\n \"<string>\"\n ],\n \"lot_number\": \"<string>\",\n \"expiry_date\": \"2023-12-25\",\n \"notes\": \"<string>\",\n \"source\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"captured_count": 123,
"total_required": 123,
"remaining": 123,
"partial": true,
"serials": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "serial",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"serial_number": "<string>",
"status": "available",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lot_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lot_number": "<string>",
"expiry_date": "2023-12-25",
"warranty_start_date": "2023-11-07T05:31:56Z",
"warranty_end_date": "2023-11-07T05:31:56Z",
"extended_warranty_end_date": "2023-11-07T05:31:56Z",
"warranty_status": "<string>",
"received_at": "2023-11-07T05:31:56Z",
"sold_at": "2023-11-07T05:31:56Z",
"returned_at": "2023-11-07T05:31:56Z",
"last_scanned_at": "2023-11-07T05:31:56Z",
"last_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"notes": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
]
}
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Partially capture serial numbers for a package line
curl --request POST \
--url https://api.arcuserp.com/v1/serials/capture-partial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"raw_barcodes": [
"<string>"
],
"serial_numbers": [
"<string>"
],
"lot_number": "<string>",
"expiry_date": "2023-12-25",
"notes": "<string>",
"source": "<string>"
}
'import requests
url = "https://api.arcuserp.com/v1/serials/capture-partial"
payload = {
"package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"raw_barcodes": ["<string>"],
"serial_numbers": ["<string>"],
"lot_number": "<string>",
"expiry_date": "2023-12-25",
"notes": "<string>",
"source": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
package_item_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
product_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
package_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
raw_barcodes: ['<string>'],
serial_numbers: ['<string>'],
lot_number: '<string>',
expiry_date: '2023-12-25',
notes: '<string>',
source: '<string>'
})
};
fetch('https://api.arcuserp.com/v1/serials/capture-partial', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcuserp.com/v1/serials/capture-partial",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'package_item_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'product_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'package_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'raw_barcodes' => [
'<string>'
],
'serial_numbers' => [
'<string>'
],
'lot_number' => '<string>',
'expiry_date' => '2023-12-25',
'notes' => '<string>',
'source' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/serials/capture-partial"
payload := strings.NewReader("{\n \"package_item_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"product_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"package_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"raw_barcodes\": [\n \"<string>\"\n ],\n \"serial_numbers\": [\n \"<string>\"\n ],\n \"lot_number\": \"<string>\",\n \"expiry_date\": \"2023-12-25\",\n \"notes\": \"<string>\",\n \"source\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.arcuserp.com/v1/serials/capture-partial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"package_item_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"product_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"package_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"raw_barcodes\": [\n \"<string>\"\n ],\n \"serial_numbers\": [\n \"<string>\"\n ],\n \"lot_number\": \"<string>\",\n \"expiry_date\": \"2023-12-25\",\n \"notes\": \"<string>\",\n \"source\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/serials/capture-partial")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"package_item_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"product_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"package_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"raw_barcodes\": [\n \"<string>\"\n ],\n \"serial_numbers\": [\n \"<string>\"\n ],\n \"lot_number\": \"<string>\",\n \"expiry_date\": \"2023-12-25\",\n \"notes\": \"<string>\",\n \"source\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"captured_count": 123,
"total_required": 123,
"remaining": 123,
"partial": true,
"serials": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "serial",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"serial_number": "<string>",
"status": "available",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lot_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lot_number": "<string>",
"expiry_date": "2023-12-25",
"warranty_start_date": "2023-11-07T05:31:56Z",
"warranty_end_date": "2023-11-07T05:31:56Z",
"extended_warranty_end_date": "2023-11-07T05:31:56Z",
"warranty_status": "<string>",
"received_at": "2023-11-07T05:31:56Z",
"sold_at": "2023-11-07T05:31:56Z",
"returned_at": "2023-11-07T05:31:56Z",
"last_scanned_at": "2023-11-07T05:31:56Z",
"last_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_package_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_package_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"notes": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
]
}
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Headers
Client-supplied idempotency key (UUID recommended). Same key within 24h returns the cached response.
255Body
UUID of fulfillment.package_items row to capture against.
UUID of the product. Used for per-product serial_config lookup.
Optional. Parent order UUID for order-state gate validation.
Optional. Parent package UUID.
Raw scanned strings. The canonical parseScan runs barcode normalization (prefix strip, format parse, lot extraction). Prefer this over serial_numbers[].
Pre-parsed serial numbers. Use raw_barcodes when possible; serial_numbers bypasses barcode parsing.
Override lot number. If omitted, parsed from raw_barcodes via parseScan.
Override expiry date. If omitted, parsed from raw_barcodes via parseScan.
Optional operator notes stored on the serial row.
Optional capture source tag (e.g. 'scanner', 'manual', 'api').
Response
Partial or complete capture result
Show child attributes
Show child attributes
Was this page helpful?

