# GET /v1/customers/{customerId}

**Service:** Customers  
**Operation:** `CustomerService_GetCustomer`

Returns the full customer record — company details, addresses, contacts, and account flags — for the given id, scoped to your company.

## Parameters

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `customerId` | path | string | yes | The id of the customer to retrieve. Required. |
| `fields` | query | string | no | Comma-separated response fields to include, using camelCase JSON names (e.g. `orderId,total.amountMicros`). Dot paths reach into nested objects and map transparently across arrays. Paths are relative to the resource, not the response envelope; envelope keys like `nextPageToken` are always preserved. Only 2xx JSON responses are filtered; error bodies pass through unmodified. Unknown names are silently ignored. Takes precedence over `excludeFields` when both are provided. |
| `excludeFields` | query | string | no | Comma-separated response fields to exclude, using camelCase JSON names. Dot paths and array-transparency work the same as `fields`. Paths are relative to the resource, not the response envelope. Only 2xx JSON responses are filtered; error bodies pass through unmodified. Ignored when `fields` is also provided. |

## Responses

| Status | Schema | Description |
| --- | --- | --- |
| 200 | `GetCustomerResponse` | A successful response. |
| 400 | `Error` | The request was rejected because it was malformed — for example a badly formed id. The body is a validation-failure envelope: an overall type and message and one entry per problem (each with a stable code, a message, and a param pointing at the offending parameter). |
| 401 | `Error` | The request is missing a valid bearer token, or the token is invalid or expired. |
| 403 | `Error` | The token is valid but does not permit this action, or the resource belongs to a company the token cannot act for. The error type is permission_denied. |
| 404 | `Error` | No customer with the given id exists for the authenticated company. |
| 429 | `Error` | The request was throttled (rate_limited) or exceeded a size limit (resource_exhausted). When throttled, the Retry-After header says how many seconds to wait before retrying; a resource_exhausted request will fail the same way if retried unchanged. |
| default | `Error` | Any other error. The body is the same error envelope every error uses: a short stable type identifying the kind of failure (for example "rate_limited" or "internal"), a human-readable message, and the request's idempotency key echoed back when one was supplied. |

## Returns

`GetCustomerResponse`

| Field | Type | Description |
| --- | --- | --- |
| `customer` | Customer | The requested customer. |
| `customer.customerId` | string | The customer's unique id. |
| `customer.companyName` | string | The customer's company name. Unique within your company and matched case-insensitively when resolving. |
| `customer.taxIdentifier` | TaxIdentifier | The customer's tax identifier, if set. Not required to be unique. On read the scheme is ABN for existing (Australian) customers. |
| `customer.taxIdentifier.value` | string | The identifier value, e.g. an 11-digit ABN. Its format depends on `type` and is NOT validated in v1: an ABN is accepted as any non-empty string of up to 15 characters. The length cap may widen when more schemes are supported. |
| `customer.taxIdentifier.type` | TaxIdentifierType | Which tax / business registration scheme `value` belongs to. Must be a specified scheme when a TaxIdentifier is present. v1 accepts only ABN. The tax / business registration scheme a TaxIdentifier belongs to. v1 accepts only ABN; the remaining values are reserved for future non-AU support.   - TAX_IDENTIFIER_TYPE_UNSPECIFIED: Default, unset value. Not a valid scheme when a TaxIdentifier is supplied.  - TAX_IDENTIFIER_TYPE_ABN: Australian Business Number. The only scheme accepted in v1.  - TAX_IDENTIFIER_TYPE_EU_VAT: EU VAT number. Does not cover the United Kingdom — a UK VAT registration is TAX_IDENTIFIER_TYPE_GB_VAT. Reserved — not accepted in v1.  - TAX_IDENTIFIER_TYPE_US_EIN: US Employer Identification Number. Reserved — not accepted in v1.  - TAX_IDENTIFIER_TYPE_US_TIN: US Taxpayer Identification Number. Reserved — not accepted in v1.  - TAX_IDENTIFIER_TYPE_US_SSN: US Social Security Number (used by sole traders). Reserved — not accepted in v1.  - TAX_IDENTIFIER_TYPE_GB_VAT: United Kingdom VAT registration number. Reserved — not accepted in v1.  - TAX_IDENTIFIER_TYPE_NZ_GST: New Zealand GST number (the IRD number of a GST-registered business). Reserved — not accepted in v1. One of: TAX_IDENTIFIER_TYPE_UNSPECIFIED, TAX_IDENTIFIER_TYPE_ABN, TAX_IDENTIFIER_TYPE_EU_VAT, TAX_IDENTIFIER_TYPE_US_EIN, TAX_IDENTIFIER_TYPE_US_TIN, TAX_IDENTIFIER_TYPE_US_SSN, TAX_IDENTIFIER_TYPE_GB_VAT, TAX_IDENTIFIER_TYPE_NZ_GST. |
| `customer.email` | string | The customer's email address, if set. |
| `customer.phone` | string | The customer's phone number. |
| `customer.defaultPriceLevelId` | string | The customer's default price level, by id. Read reference only; line pricing is supplied by the caller on each order line. |
| `customer.defaultPriceLevelName` | string | The name of the customer's default price level. |
| `customer.billingAddress` | Address | The customer's billing address. |
| `customer.billingAddress.address1` | string | First address line (street number and name). |
| `customer.billingAddress.address2` | string | Second address line (unit, suite, or similar). |
| `customer.billingAddress.city` | string | City or suburb. |
| `customer.billingAddress.state` | string | State, province, or region. |
| `customer.billingAddress.postalCode` | string | Postal code (ZIP code, postcode). |
| `customer.billingAddress.countryCode` | string | Country, as an uppercase ISO 3166-1 alpha-2 code (e.g. "AU"). Optional; when supplied, any other form is rejected. |
| `customer.deliveryAddresses` | Address[] | The customer's delivery addresses. |
| `customer.deliveryAddresses.address1` | string | First address line (street number and name). |
| `customer.deliveryAddresses.address2` | string | Second address line (unit, suite, or similar). |
| `customer.deliveryAddresses.city` | string | City or suburb. |
| `customer.deliveryAddresses.state` | string | State, province, or region. |
| `customer.deliveryAddresses.postalCode` | string | Postal code (ZIP code, postcode). |
| `customer.deliveryAddresses.countryCode` | string | Country, as an uppercase ISO 3166-1 alpha-2 code (e.g. "AU"). Optional; when supplied, any other form is rejected. |
| `customer.contacts` | CustomerContact[] | The customer's contacts. |
| `customer.contacts.contactId` | string | The contact's unique id. |
| `customer.contacts.name` | string | The contact's name. |
| `customer.contacts.email` | string | The contact's email address. |
| `customer.contacts.phone` | string | The contact's phone number. |
| `customer.contacts.mobile` | string | The contact's mobile number. |
| `customer.isOnCreditHold` | boolean | Whether the customer is currently on credit hold. |
| `customer.disableTaxByDefault` | boolean | Whether tax is disabled by default for this customer. |
| `customer.lastOrderAt` | string | When the customer most recently placed an order. Populated on ListCustomers entries; not currently returned by GetCustomer. |

---

Source: https://developer.factory.app/reference/customers/get-customer · Factory Sales API v1
