Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.4.2"
".": "0.5.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 21
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/azure/partnermax-fa73d56cb03e02b0bf904b1336512bcdef94150eb14ecd514ef709214608d69f.yml
openapi_spec_hash: 5b05f6d46fc6d51dcd5b9930a6fc29ba
config_hash: 085d04841ad5a779fb40c5000448d9d9
configured_endpoints: 27
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/azure/partnermax-33c6a68b0b225895b68bd2e9bf19b189b01fa887239b98a5867eb7b1505985ef.yml
openapi_spec_hash: c79381758719d11fc5fb4f1fb1b1d8b2
config_hash: b71de6785b0e0c91836519dead13f632
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## 0.5.0 (2026-06-29)

Full Changelog: [v0.4.2...v0.5.0](https://github.com/DealerMax-app/partnermax-node/compare/v0.4.2...v0.5.0)

### Features

* regenerate PartnerMAX SDKs for v1.5.13 ([f52c426](https://github.com/DealerMax-app/partnermax-node/commit/f52c4261a25303874f7243c6f2626f1d210f9ee4))
* regenerate SDK for vehicle contract 1.5.12 ([6393333](https://github.com/DealerMax-app/partnermax-node/commit/6393333117d270671b25bc196ea47c87ec20360b))

## 0.4.2 (2026-06-28)

Full Changelog: [v0.4.1...v0.4.2](https://github.com/DealerMax-app/partnermax-node/compare/v0.4.1...v0.4.2)
Expand Down
16 changes: 16 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ Methods:
- <code title="patch /v1/dealers/{dealer_id}">client.dealers.<a href="./src/resources/dealers/dealers.ts">update</a>(dealerID, { ...params }) -> DealerDetail</code>
- <code title="get /v1/dealers">client.dealers.<a href="./src/resources/dealers/dealers.ts">list</a>({ ...params }) -> DealerSummariesCursorPage</code>
- <code title="delete /v1/dealers/{dealer_id}">client.dealers.<a href="./src/resources/dealers/dealers.ts">delete</a>(dealerID) -> void</code>
- <code title="post /api/partner/dealers/{external_dealer_id}/activate">client.dealers.<a href="./src/resources/dealers/dealers.ts">activateReference</a>(externalDealerID) -> PartnerDealerResponse</code>
- <code title="delete /api/partner/dealers/{external_dealer_id}">client.dealers.<a href="./src/resources/dealers/dealers.ts">revokeReference</a>(externalDealerID) -> void</code>
- <code title="post /api/partner/dealers/{external_dealer_id}/suspend">client.dealers.<a href="./src/resources/dealers/dealers.ts">suspendReference</a>(externalDealerID) -> PartnerDealerResponse</code>

## NltSettings

Expand Down Expand Up @@ -85,3 +88,16 @@ Methods:
- <code title="post /v1/dealers/{dealer_id}/vehicles/{vehicle_id}/images">client.dealers.vehicles.images.<a href="./src/resources/dealers/vehicles/images.ts">create</a>(vehicleID, { ...params }) -> VehicleImage</code>
- <code title="get /v1/dealers/{dealer_id}/vehicles/{vehicle_id}/images">client.dealers.vehicles.images.<a href="./src/resources/dealers/vehicles/images.ts">list</a>(vehicleID, { ...params }) -> VehicleImageList</code>
- <code title="delete /v1/dealers/{dealer_id}/vehicles/{vehicle_id}/images/{image_id}">client.dealers.vehicles.images.<a href="./src/resources/dealers/vehicles/images.ts">delete</a>(imageID, { ...params }) -> void</code>

### Accessories

Types:

- <code><a href="./src/resources/dealers/vehicles/accessories.ts">VehicleAccessoriesCatalog</a></code>
- <code><a href="./src/resources/dealers/vehicles/accessories.ts">VehicleAccessoryItem</a></code>

Methods:

- <code title="put /v1/dealers/{dealer_id}/vehicles/{vehicle_id}/accessories">client.dealers.vehicles.accessories.<a href="./src/resources/dealers/vehicles/accessories.ts">update</a>(vehicleID, { ...params }) -> VehicleAccessoriesCatalog</code>
- <code title="post /v1/dealers/{dealer_id}/vehicles/{vehicle_id}/accessories/catalog/refresh">client.dealers.vehicles.accessories.<a href="./src/resources/dealers/vehicles/accessories.ts">refreshCatalog</a>(vehicleID, { ...params }) -> VehicleAccessoriesCatalog</code>
- <code title="get /v1/dealers/{dealer_id}/vehicles/{vehicle_id}/accessories/catalog">client.dealers.vehicles.accessories.<a href="./src/resources/dealers/vehicles/accessories.ts">retrieveCatalog</a>(vehicleID, { ...params }) -> VehicleAccessoriesCatalog</code>
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "partnermax",
"version": "0.4.2",
"version": "0.5.0",
"description": "The official TypeScript library for the Partnermax API",
"author": "Partnermax <support@dealermax.app>",
"types": "dist/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,7 @@ export class Partnermax {
*/
keys: API.Keys = new API.Keys(this);
/**
* Provision, update, deactivate, and list dealers owned by the calling partner.
* Register, update, deactivate, and list dealer references registered for the calling partner.
*/
dealers: API.Dealers = new API.Dealers(this);
}
Expand Down
56 changes: 45 additions & 11 deletions src/resources/dealers/dealers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,17 @@ import { RequestOptions } from '../../internal/request-options';
import { path } from '../../internal/utils/path';

/**
* Provision, update, deactivate, and list dealers owned by the calling partner.
* Register, update, deactivate, and list dealer references registered for the calling partner.
*/
export class Dealers extends APIResource {
nltSettings: NltSettingsAPI.NltSettings = new NltSettingsAPI.NltSettings(this._client);
nlt: NltAPI.Nlt = new NltAPI.Nlt(this._client);
vehicles: VehiclesAPI.Vehicles = new VehiclesAPI.Vehicles(this._client);

/**
* Create a partner-owned opaque dealer reference. SDK users call
* `client.dealers.create(...)`; the generated client sends this request to the
* core-owned `/api/partner/dealers` route.
* Register an opaque dealer reference for this partner. SDK users call
* `client.dealers.create(...)`; the generated client sends this request to
* `/api/partner/dealers` on the public PartnerMAX API host.
*/
create(params: DealerCreateParams, options?: RequestOptions): APIPromise<PartnerDealerResponse> {
const { 'Idempotency-Key': idempotencyKey, ...body } = params;
Expand Down Expand Up @@ -76,7 +76,7 @@ export class Dealers extends APIResource {
}

/**
* List dealers owned by the calling partner. Cursor-paginated.
* List dealer references registered for the calling partner. Cursor-paginated.
*/
list(
query: DealerListParams | null | undefined = {},
Expand All @@ -94,6 +94,36 @@ export class Dealers extends APIResource {
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
});
}

/**
* Reactivate a non-terminal opaque dealer reference. SDK users can also call
* `PATCH /v1/dealers/{dealer_id}` with `status=active`; this registry endpoint is
* exposed for integrations that manage the `/api/partner` lifecycle directly.
*/
activateReference(externalDealerID: string, options?: RequestOptions): APIPromise<PartnerDealerResponse> {
return this._client.post(path`/api/partner/dealers/${externalDealerID}/activate`, options);
}

/**
* Terminally revoke an opaque dealer reference. This is equivalent to deleting the
* dealer through `/v1/dealers/{dealer_id}` from the partner's perspective: the
* public status becomes `deleted` and reactivation requires DealerMAX support.
*/
revokeReference(externalDealerID: string, options?: RequestOptions): APIPromise<void> {
return this._client.delete(path`/api/partner/dealers/${externalDealerID}`, {
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
});
}

/**
* Temporarily deactivate an opaque dealer reference. SDK users can also call
* `PATCH /v1/dealers/{dealer_id}` with `status=inactive`; both routes map the
* public status to `inactive`.
*/
suspendReference(externalDealerID: string, options?: RequestOptions): APIPromise<PartnerDealerResponse> {
return this._client.post(path`/api/partner/dealers/${externalDealerID}/suspend`, options);
}
}

export type DealerSummariesCursorPage = CursorPage<DealerSummary>;
Expand Down Expand Up @@ -190,15 +220,19 @@ export interface PartnerDealerResponse {
created_at: string;

/**
* The partner-owned external dealer id.
* The partner-supplied external dealer id.
*/
dealer_id: string;

partner_id: string;

public_surfaces_enabled: boolean;

status: 'active' | 'suspended' | 'revoked';
/**
* Public API status. The backing registry may store internal states such as
* suspended/revoked, but SDK responses expose inactive/deleted.
*/
status: 'active' | 'inactive' | 'deleted';

updated_at: string;

Expand All @@ -210,14 +244,14 @@ export interface PartnerDealerResponse {

export interface DealerCreateParams {
/**
* Body param: Partner-owned opaque dealer id. This becomes the dealer_id used by
* vehicle and NLT SDK calls.
* Body param: Partner-supplied opaque dealer id. This becomes the dealer_id used
* by vehicle and NLT SDK calls.
*/
external_dealer_id: string;

/**
* Body param: When true, the dealer can immediately receive vehicle/NLT
* operations. When false, create the registry row but keep it suspended until
* operations. When false, create the registry row but keep it inactive until
* activated.
*/
activate?: boolean;
Expand Down Expand Up @@ -286,7 +320,7 @@ export interface DealerUpdateParams {
}

export interface DealerListParams extends CursorPageParams {
status?: 'active' | 'inactive' | 'all';
status?: 'active' | 'inactive' | 'deleted' | 'all';
}

Dealers.Nlt = Nlt;
Expand Down
5 changes: 2 additions & 3 deletions src/resources/dealers/nlt/offers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -312,9 +312,8 @@ export namespace OfferRetrieveResponse {
* One network dealer's quote for this offer.
*
* Sorted by `min_monthly_canon_eur ASC`. In PartnerMAX this list is scoped to the
* calling partner's `partner_dealers` rows and returns the partner-owned
* `external_dealer_id`. Legacy `dlr_<id>` values remain only for compatibility
* callers.
* calling partner's dealer references and returns the partner-supplied external
* dealer id.
*/
export interface NetworkOffer {
dealer_id: string;
Expand Down
135 changes: 135 additions & 0 deletions src/resources/dealers/vehicles/accessories.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

import { APIResource } from '../../../core/resource';
import { APIPromise } from '../../../core/api-promise';
import { RequestOptions } from '../../../internal/request-options';
import { path } from '../../../internal/utils/path';

/**
* Used-vehicle stock management for dealers registered under a partner. Every vehicle request is scoped by dealer_id; the partner uploads each used vehicle by its canonical Motornet UNI code; DealerMAX joins the partner-provided pricing and stock metadata with the catalog master so the resulting listing is immediately indexed by the AI surfaces (MCP server, ChatGPT Custom GPT, NLWeb /ask, and the SEO/JSON-LD layer).
*/
export class Accessories extends APIResource {
/**
* Set Vehicle Accessories
*/
update(
vehicleID: string,
params: AccessoryUpdateParams,
options?: RequestOptions,
): APIPromise<VehicleAccessoriesCatalog> {
const { dealer_id, ...body } = params;
return this._client.put(path`/v1/dealers/${dealer_id}/vehicles/${vehicleID}/accessories`, {
body,
...options,
});
}

/**
* Refresh Vehicle Accessories Catalog
*/
refreshCatalog(
vehicleID: string,
params: AccessoryRefreshCatalogParams,
options?: RequestOptions,
): APIPromise<VehicleAccessoriesCatalog> {
const { dealer_id } = params;
return this._client.post(
path`/v1/dealers/${dealer_id}/vehicles/${vehicleID}/accessories/catalog/refresh`,
options,
);
}

/**
* Get Vehicle Accessories Catalog
*/
retrieveCatalog(
vehicleID: string,
params: AccessoryRetrieveCatalogParams,
options?: RequestOptions,
): APIPromise<VehicleAccessoriesCatalog> {
const { dealer_id } = params;
return this._client.get(
path`/v1/dealers/${dealer_id}/vehicles/${vehicleID}/accessories/catalog`,
options,
);
}
}

/**
* Per-vehicle accessories catalog plus current selections.
*/
export interface VehicleAccessoriesCatalog {
alloy_wheel_size?: number | null;

equipment?: Array<VehicleAccessoryItem>;

optionals?: Array<VehicleAccessoryItem>;

packages?: Array<VehicleAccessoryItem>;

series?: Array<VehicleAccessoryItem>;
}

/**
* Single accessory/equipment row available for a used vehicle.
*/
export interface VehicleAccessoryItem {
id: string;

description: string;

category?: string | null;

code?: string | null;

group?: string | null;

price_eur?: number | null;

selected?: boolean;
}

export interface AccessoryUpdateParams {
/**
* Path param
*/
dealer_id: string;

/**
* Body param
*/
alloy_wheel_size?: number | null;

/**
* Body param
*/
equipment_ids?: Array<string>;

/**
* Body param
*/
optional_ids?: Array<string>;

/**
* Body param
*/
package_ids?: Array<string>;
}

export interface AccessoryRefreshCatalogParams {
dealer_id: string;
}

export interface AccessoryRetrieveCatalogParams {
dealer_id: string;
}

export declare namespace Accessories {
export {
type VehicleAccessoriesCatalog as VehicleAccessoriesCatalog,
type VehicleAccessoryItem as VehicleAccessoryItem,
type AccessoryUpdateParams as AccessoryUpdateParams,
type AccessoryRefreshCatalogParams as AccessoryRefreshCatalogParams,
type AccessoryRetrieveCatalogParams as AccessoryRetrieveCatalogParams,
};
}
2 changes: 1 addition & 1 deletion src/resources/dealers/vehicles/images.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { multipartFormRequestOptions } from '../../../internal/uploads';
import { path } from '../../../internal/utils/path';

/**
* Used-vehicle stock management for partner-owned dealers. The partner uploads each used vehicle by its canonical Motornet UNI code; DealerMAX joins the partner-provided pricing and stock metadata with the catalog master so the resulting listing is immediately indexed by the AI surfaces (MCP server, ChatGPT Custom GPT, NLWeb /ask, and the SEO/JSON-LD layer).
* Used-vehicle stock management for dealers registered under a partner. Every vehicle request is scoped by dealer_id; the partner uploads each used vehicle by its canonical Motornet UNI code; DealerMAX joins the partner-provided pricing and stock metadata with the catalog master so the resulting listing is immediately indexed by the AI surfaces (MCP server, ChatGPT Custom GPT, NLWeb /ask, and the SEO/JSON-LD layer).
*/
export class Images extends APIResource {
/**
Expand Down
8 changes: 8 additions & 0 deletions src/resources/dealers/vehicles/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

export {
Accessories,
type VehicleAccessoriesCatalog,
type VehicleAccessoryItem,
type AccessoryUpdateParams,
type AccessoryRefreshCatalogParams,
type AccessoryRetrieveCatalogParams,
} from './accessories';
export {
Images,
type VehicleImage,
Expand Down
Loading
Loading