Skip to main content

planpoint-sdk-php

Official PHP SDK for the PlanPoint API.

Requirements

  • PHP 8.1+
  • Composer

Installation

Create a composer.json in your project:
{
  "require": { "planpoint/planpoint": "dev-main" },
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/planpoint-io/planpoint-sdk-php"
    }
  ],
  "minimum-stability": "dev"
}
Then install:
composer install
SSL Note: If you get a cURL SSL certificate error on Windows, download the CA bundle and add to your php.ini:
curl.cainfo=C:\path\to\cacert.pem
openssl.cafile=C:\path\to\cacert.pem
Download cacert.pem from curl.se/ca/cacert.pem.

Quick Start

<?php
require 'vendor/autoload.php';

use Planpoint\PlanpointClient;

// 1. Authenticate
$unauthClient = new PlanpointClient('');
$loginResp = $unauthClient->authentication->login(
    new \Planpoint\Authentication\Requests\LoginBody([
        'username' => 'you@example.com',
        'password' => 'yourpassword',
    ])
);
$token = $loginResp->accessToken;

// 2. Create an authenticated client
$client = new PlanpointClient($token);

// 3. Fetch your projects
$projects = $client->projects->getMyProjects();
foreach ($projects as $project) {
    echo $project->name . "\n";
}

API Reference

Authentication

$client->authentication->login(LoginBody $request)

Authenticate and receive a JWT token.
FieldTypeRequiredDescription
usernamestringYesUser email
passwordstringNoUser password
impersonateboolNoImpersonate another user
Returns: LoginResponse->accessToken: string

Projects

$client->projects->getMyProjects()

List all projects belonging to the authenticated user. Requires auth. Returns: ProjectSummary[]->name, ->namespace, ->hostName, ->status, ->paused, ->createdAt

$client->projects->findProject(FindProjectRequest $request)

Find a public project by namespace and hostname. No auth required.
FieldTypeRequiredDescription
namespacestringYesProject namespace
hostNamestringYesAllowed hostname
Returns: Project — full project with floors, units, settings

$client->projects->getProject(string $id)

Get a project by ID. Requires auth.
ParamTypeRequiredDescription
$idstringYesProject ObjectId
Returns: Project

$client->projects->updateProject(string $id, UpdateProjectRequest $request)

Update project settings. Requires auth. Returns: Project

Groups

$client->groups->getGroups()

List all groups for the authenticated user. Requires auth. Returns: GroupsListResponse->records: Group[], ->count: int

$client->groups->getGroup(string $id)

Get a group by ID. Requires auth. Returns: Group->name, ->namespace, ->hostName, ->type, ->projects, ->isOwner, ->isAdmin, ->isEditor

$client->groups->createGroup(CreateGroupRequest $request)

Create a new group. Requires auth.
FieldTypeRequiredDescription
namestringYesGroup name
namespacestringNoNamespace
hostNamestringNoHostname
typestringNoGroup type
propertyTypestringNoProperty type
Returns: Group

$client->groups->updateGroup(string $id, UpdateGroupRequest $request)

Update a group. Requires auth. Returns: Group

Floors

$client->floors->getFloors(GetFloorsRequest $request)

List all floors for a project. Requires auth.
FieldTypeRequiredDescription
pidstringYesProject ObjectId
Returns: FloorFull[]->name, ->project, ->level, ->position, ->path, ->image

$client->floors->getFloor(string $id)

Get a floor by ID. Requires auth. Returns: FloorFull

$client->floors->createFloor(CreateFloorRequest $request)

Create a new floor. Requires auth.
FieldTypeRequiredDescription
projectarrayYes['_id' => '<project_id>']
namestringYesFloor name
positionintNoDisplay order
pathstringNoSVG/image path
alternativePathsstring[]NoAdditional paths
Returns: FloorFull

$client->floors->updateFloor(string $id, UpdateFloorRequest $request)

Update a floor. Requires auth. Returns: FloorFull

Units

$client->units->getUnits(GetUnitsRequest $request)

List all units for a project. Requires auth.
FieldTypeRequiredDescription
pidstringYesProject ObjectId
Returns: UnitsListResponse->records: UnitFull[], ->count: int UnitFull fields: ->floor, ->name, ->unitNumber, ->status, ->price, ->bed, ->bath, ->sqft, ->model, ->orientation, ->parking status values: Available | OnHold | Sold | Leased | Unavailable

$client->units->getUnit(string $id)

Get a unit by ID. Requires auth. Returns: UnitFull

$client->units->createUnit(CreateUnitRequest $request)

Create a new unit. Requires auth.
FieldTypeRequiredDescription
floorarrayYes['_id' => '<floor_id>']
Returns: UnitFull

$client->units->updateUnit(string $id, UpdateUnitRequest $request)

Update a unit. Requires auth. Returns: UnitFull

$client->units->deleteUnit(string $id)

Delete a unit. Requires auth. Returns: array['message' => string]

$client->units->batchUpdateUnits(BatchUpdateUnitsRequest $request)

Update multiple units at once. Requires auth.
FieldTypeRequiredDescription
idsstring[]YesUnit ObjectIds to update
patchDataarrayYesFields to apply to all
Returns: UnitFull[]

Leads

$client->leads->getLeads(GetLeadsRequest $request)

List all leads for a project. Requires auth.
FieldTypeRequiredDescription
pidstringYesProject ObjectId
Returns: Lead[]->name, ->email, ->phone, ->message, ->unit, ->createdAt