Skip to main content
POST
Create an account

Authorizations

Authorization
string
header
required

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

Idempotency-Key
string

Optional idempotency key for safe retries.

Maximum string length: 255

Body

application/json

Creates a new account with its full onboarding graph in one atomic request.

Required fields: name (or display_name/company_name/first_name+last_name) and account_type.

Nested children (all optional, all atomic):

  • addresses[]: billing and/or shipping addresses. Supports street1/region/postal_code (Stripe-style aliases) or line1/state/zip (canonical). First address of each type auto-becomes the default.
  • contacts[]: person contacts. role is a public alias for the title field. At most one is_primary: true.
  • payment_methods[]: Stripe payment methods via stripe_payment_method_id (the pm_* token from a completed SetupIntent). Requires Stripe to be configured for the entity.
  • tags[]: tag names to apply. Tags are auto-created if they do not exist for the entity.

Transaction guarantee: all children are written in a single database transaction. Any child failure rolls back the parent account and every already-inserted child. You get a complete graph or nothing.

Hydrated response: the 201 body includes addresses, contacts, payment_methods, and tags arrays inline. No follow-up GETs required.

See also: Creating accounts with addresses guide

name
string
required

Human-readable name for the account. Required. Aliases: display_name (business), company_name (business), or first_name+last_name (individual). All are accepted; name is the canonical public API field.

account_type
enum<string>
required
Available options:
business,
individual,
lead,
vendor
display_name
string | null

Alias for name. Auto-derived from company_name or first+last if omitted.

company_name
string | null
first_name
string | null

For individual accounts.

last_name
string | null

For individual accounts.

email
string | null
phone
string | null

Maps to phone_main internally.

phone_main
string | null
phone_secondary
string | null
phone_mobile
string | null
website
string | null
payment_term_id
string<uuid> | null

Must reference an existing payment_terms row for this entity.

pricing_level_id
string<uuid> | null

Alias for default_pricing_level_id.

credit_limit
number | null

Credit ceiling in USD. Returned as a JS number (float), never a string.

tax_exempt
boolean
avatax_entity_code
string | null
tax_number
string | null
default_pricing_level_id
string<uuid> | null
default_location_id
string<uuid> | null
default_shipping_method
string | null
notes
string | null
metadata
object | null
addresses
object[]

Billing and/or shipping addresses to create atomically with the account. Supports street1/region/postal_code (Stripe-style) OR line1/state/zip (canonical). At most one address per type may have is_default_billing: true or is_default_shipping: true.

contacts
object[]

Person contacts to create atomically with the account. If omitted, an auto-generated primary contact is created from account-level name/email/phone. At most one contact may have is_primary: true. role is the public API alias for the internal title field.

payment_methods
object[]

Stripe payment methods to attach atomically with the account. Each item requires a stripe_payment_method_id (the pm_* token from a completed Stripe SetupIntent or test card). Requires Stripe to be configured for the entity.

tags
string[]

Tag names to apply to the account. Tags are auto-created if they do not exist for the entity (using the name as the slug base). Idempotent: applying the same tag twice is a no-op.

Response

Account created

data
object

An Arcus ERP account. Represents a customer, vendor, lead, or individual. account_type drives AR vs AP behavior: business/individual/lead = customer (AR); vendor = supplier (AP). entity_id is always from the API key (Layer 1 isolation).