---
title: "Start (or update) a pet business's sign-up"
method: POST
path: "/v1/business/applications"
tags: ["Business"]
---

# Start (or update) a pet business's sign-up

`POST /v1/business/applications`

## Request

- Base URL: `https://api.nogpets.com`
- URL: `https://api.nogpets.com/v1/business/applications`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://api.nogpets.com/oauth/authorize`, token URL `https://api.nogpets.com/oauth/token`, scopes: `business:write`)
  - HTTP bearer

Step 1 of registering a pet-care business on NogPets, from any country. Creates a DRAFT application owned by the signed-in person, or updates its details when `applicationId` is given. `country` (ISO 3166) is required for a new one unless the phone's country code says it; `currency` (ISO 4217) and `timezone` (IANA) default from the country when it has one of each. Nothing is public until NogPets approves it.
The order: startBusinessSignup → addBusinessServices → setServiceArea → addResources → setOperatingHours → inviteStaff (optional) → connectPayfast (optional, South Africa only) → getSignupStatus → submitBusinessForReview.

## Request body

- BusinessDetails: New application: businessName, categories, town and a phone or email are required. With applicationId: only what changes.
  - `applicationId` string: Update this application instead of starting one.
  - `businessName` string: The registered or main business name.
  - `tradingName` string: The name clients know, if different.
  - `contactName` string: The owner or the person NogPets talks to.
  - `phone` string: With its country code (+1 512 555 0100), or national for the business's country (082 555 0101 in South Africa); stored as E.164.
  - `email` string
  - `website` string
  - `town` string: Where the business is based, e.g. Somerset West, Austin TX, Manchester.
  - `country` string: ISO 3166-1 alpha-2 code of the country the business is in: ZA, US, GB, AU, DE… Required for a new application unless the phone's country code says it.
  - `currency` string: ISO 4217 code the business charges in (ZAR, USD, GBP, EUR…). Defaults from the country; prices are in its minor units.
  - `timezone` string: IANA time zone of its hours, e.g. America/Chicago. Defaults when the country has one zone.
  - `payoutPreference` object, nullable: Outside South Africa: how they'd like to be paid, for NogPets to arrange after approval. Information only: never account numbers, IBANs, cards, keys or passwords (refused).
    - `method` 'BANK_TRANSFER' | 'PAYPAL' | 'STRIPE' | 'WISE' | 'CASH' | 'OTHER', required
    - `note` string: A few words, e.g. "ACH in USD" or "PayPal business account".
  - `suburbs` string[]: Suburbs they serve, as they say them (set_service_area makes them bookable areas).
  - `categories` LineId[]
  - `mode` 'MOBILE' | 'SALON' | 'BOTH': MOBILE goes to the client (what NogPets books today); SALON is at their premises; BOTH.
  - `vans` integer
  - `staff` integer
  - `about` string: One or two plain sentences about the business.
  - `claimListingId` string: A directory listing id (from possibleListings or find_pet_businesses) this business owns; "" unclaims.
  - `whatsappOptIn` boolean: The owner agrees to NogPets WhatsApp messages about the application.

## Response `200`

The updated application

- BusinessApplication
  - `applicationId` string, required
  - `status` 'DRAFT' | 'SUBMITTED' | 'APPROVED' | 'REJECTED', required: DRAFT while it's being filled in; SUBMITTED while NogPets reviews it; APPROVED (the business exists, bizId) or REJECTED (reviewNote says why; editing it makes it a DRAFT again).
  - `business` object, required
  - `listing` object, nullable
    - `id` string
    - `name` string
    - `town` string
  - `services` object[]
  - `areas` object[]: Proposed territories, PENDING until approved.
  - `overlaps` object[]
    - `area` string
    - `territory` string
    - `grantedTo` string
  - `resources` object[]
  - `invites` object[]
  - `payfast` object, nullable
    - `merchantId` string
    - `split` boolean
    - `status` string
  - `whatsappOptIn` boolean
  - `plan` unknown
  - `checklist` ChecklistItem[], required
    - `id` 'details' | 'services' | 'area' | 'resources' | 'payfast' | 'payout' | 'staff' | 'listing', required
    - `label` string, required
    - `done` boolean, required
    - `required` boolean, required
    - `detail` string
  - `readyToSubmit` boolean, required
  - `reviewNote` string: Why NogPets asked for changes.
  - `bizId` string: The business, once approved.
  - `possibleListings` object[]: Directory listings that may be this business: offer to claim one.
  - `payfastInfo` string
  - `summary` string
  - `statusUrl` string, uri, nullable: A page the person can open to see the checklist and status.
  - `welcomeUrl` string, uri: What NogPets offers businesses, for the person to read.
  - `next` string, required: What to do now.

## Other responses

- `201`: The new application
- `400`: The input is wrong (`INVALID_ARGUMENT`, or a pricing code such as `ONE_PRIMARY`, `PET_TYPE`, `UNKNOWN_SERVICE`).
- `401`: No token, or it's expired or revoked. The `WWW-Authenticate` header points at the resource metadata.
- `403`: The token lacks a scope (`INSUFFICIENT_SCOPE`, with `details.scope`).
- `404`: Not found, or not the person's.
- `409`: A rule said no: `NO_COVERAGE`, `NO_AVAILABILITY`, `SLOT_TAKEN`, `TOO_LATE`, `CONFIRM_REQUIRED` (with `details.summary`), `NOTHING_TO_PAY`, `SHOP_OFF`, `STOCK`, `SHIPPING`, `DISCOUNT`, `CASH`, `FAILED_PRECONDITION`; business sign-up: `UNDER_REVIEW`, `APPROVED`, `NOT_READY`, `TOO_MANY`, `LISTING_TAKEN`, `PAYFAST_ZA_ONLY`. `NO_COVERAGE` carries `details.leadId`, `details.message` (tell the person) and `details.next`.

---

[API](https://skmtc.dev/nogpets/apis/nogpets-api.md) · [All operations](https://skmtc.dev/nogpets/apis/nogpets-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nogpets/apis/nogpets-api/revisions/a202c1012173?raw)
