Configuring Your Entity
Before you start creating orders, recording payments, or managing inventory through the API, you need to configure your entity’s master data. This guide walks through the essential setup steps in the recommended order.Step 1: Configure Locations
Every inventory movement, order, and fulfillment is tied to a location. At minimum you need one warehouse location.name and code are required. The key needs the locations:write scope.
Location types: warehouse, virtual, holding, writeoff, amazon, external, marketplace, dropship, overflow. Any other value is refused with a 400 that lists the valid ones. type defaults to warehouse. For warehouse and overflow locations, is_sellable and ships_from default to true; for every other type they default to false. is_receiving defaults to true. Warehouse, overflow and holding locations also get a quarantine bin created for them automatically.
You can also add "is_default": true to the create call to make the new location the default in the same step. A location can be reviewed and edited in the app under Settings > Company > Locations.
After creating your primary warehouse, designate it as the default:
address.line1), the same call also makes that address the entity’s ship-from origin for shipping rates and labels.
Orders, inventory balances, and fulfillment packages are scoped to
location_id. Your API key’s entity owns all location rows.
Step 2: Set Up Payment Terms
Payment terms define when invoices are due. They appear on orders and can be assigned per account.
The key needs the
payment_terms:write scope. Set one term as the entity default:
Step 3: Configure Tax Rates
Tax rates are your entity’s fallback rates when AvaTax is not configured or unavailable. If AvaTax is active, these rates are bypassed automatically. Rates are stored as decimals (8.25% =0.0825).
Lookup precedence: AvaTax (if connected) > entity tax_rates > 0%.
The call needs the
tax_rates:write scope.
Step 4: Set Up Currencies and Exchange Rates (Optional)
USD is seeded for every entity at creation, and Arcus books every transaction in a single currency today. Because of that, the calls that create a currency or an exchange rate are switched off by default: until multi-currency is enabled for your entity, each of them returns501 with the code feature_not_enabled, and nothing is written. Reading currencies and exchange rates is not affected. If you do not sell in more than one currency, skip this step.
When multi-currency is enabled for your entity, add a currency like this:
code must be three uppercase letters (an ISO 4217 code), or the call is refused with code_not_iso_4217. The key needs the currencies:write scope.
Then record an exchange rate for the day (append-only, one row per date). Currencies can be named by their code or by their id:
from_currency_id and to_currency_id are accepted in place of the codes and win if both are sent, and effective_date is an alias of as_of_date. The key needs the exchange_rates:write scope.
An exchange rate is only a recorded snapshot. No order, payment or ledger entry reads it today, so it never changes an amount.
Step 5: Configure Product Categories
Categories organize your product catalog. They also carry default UOM settings.name is required, and the key needs the product_categories:write scope. The other fields you can set are default_length_uom, default_volume_uom, is_active (default true), is_final_sale (default false), and restocking_fee_pct and handling_fee_pct, each a number from 0 to 100.
Step 6: Set Up Pricing Levels
Pricing levels (price books) let you assign different prices to different account types. Thedefaults_on and show_on fields accept account-type values: individual, lead, business, vendor.
defaults_on and show_on: individual, lead, business, vendor. A value outside this list is refused. Only name is required, and the key needs the pricing_levels:write scope. Per-product prices for a level are added separately through the product pricing call.
Step 7: Configure Units of Measure
System UOMs (EA, LB, OZ, IN, CS, etc.) are pre-seeded and cannot be modified. You can add custom UOMs for your industry.POST /v1/units-of-measure:
uom_code, label, uom_type, base_code and to_base_factor are all required. uom_type is one of quantity, weight, length, volume or time. base_code must be an existing unit of that same type, and to_base_factor is how many of the base unit one of the new unit equals (a positive number). Codes are stored in uppercase. Creating needs the units_of_measure:write scope; listing and converting need units_of_measure:read.
System UOMs (is_system: true) cannot be modified or deleted via the API; the call returns 403 system_row_locked. They are shared
across all entities.
Step 8: Tags (Optional)
Tags let you label orders, accounts, and products for operational workflows. System tags (is_system: true) are pre-seeded and control fulfillment behavior (Hold Shipment, Block New Orders, etc.).
name is required, and the tag’s slug is built from it (or from a slug you send); a slug that is already taken returns 409, and slugs that match a status word such as paid or draft are refused. applies_to must list at least one resource type from order, account, product, return and package. A tag with "is_actionable": true must also name an action_key that Arcus recognizes. The key needs the tags:write scope.
The attach call returns the tags it applied in data.applied; a tag already on the resource is left alone. It is refused with 400 when a tag does not apply to that resource type or is not found in your entity, and with 403 when the resource is not in your entity. Attaching a tag to an order that came from a connected Shopify store also adds the tag to that store’s order.
Dual-scope requirement: Attaching a tag to a resource requires BOTH tags:write AND
the resource’s write scope (e.g. orders:write for orders, accounts:write for accounts).
Step 9: Invite Your Team
Master data without people to act on it does not run an entity. Before going live, invite the operations, accounting, fulfillment, and support team members who will use Arcus. User management is currently a UI workflow. It is intentionally not exposed in the public v1 API surface because invitations, role assignment, MFA enrollment, and entity membership are organization-level concerns that span beyond a single entity’s API key scope. Send your ops admin to the in-app Organization Users page to send invitations. Where to invite users:- Sign in to
https://app.arcuserp.com. - Open Organization.
- Choose Users (the page is Organization > Users).
- Select Invite User.
- Enter the email, choose the starting role, select the target entities, and optionally restrict location access.
- Send the invitation. The invited user receives an email, sets a password, completes MFA, and lands in the entity you assigned.
- The user appears in Organization Users with a Pending status until the invitation is accepted.
- After acceptance, the user appears in Settings > Team & Roles > Entity Team for the entity you chose.
- The user can sign in and see the modules their role allows.
https://arcuserp.mintlify.app/support/settings/users.
For role design, custom roles, and the Role Coverage Report, read:
https://arcuserp.mintlify.app/support/settings/roles-permissions.
When user management is exposed in a future API release, this guide will gain curl examples
for invite, role assignment, location restriction, and deactivation. Until then, treat
user invite as a one-time bootstrap step done in the UI before your API integration starts
shipping real orders.
Recommended Setup Order
For a new entity, configure in this sequence:- Locations (warehouse + receiving dock)
- Payment Terms (Net 30, COD, CIA)
- Tax Rates (if not using AvaTax)
- Currencies + Exchange Rates (optional; only once multi-currency is enabled for your entity)
- Product Categories
- Pricing Levels
- Units of Measure (custom only; system UOMs already exist)
- Tags (optional, system tags pre-seeded)
- Integrations (Stripe, Shippo, AvaTax via Settings > Integrations in the app, then poll via API)
- Invite team members (Organization > Users, in the app)

