Payaca API (1.0.0)

Download OpenAPI specification:

Tech Team: tech@payaca.com License: Proprietary

Welcome to the Payaca API docs.

Authentication

The external API uses HTTP Basic Authentication with client credentials (Client ID and Client Secret).

Creating API Credentials

API credentials can be created through the Payaca provider web application:

  1. Navigate to My Company → Integrations
  2. Click "Create API key"
  3. Provide a name for the credentials
  4. Record the generated Client ID and Client Secret immediately - the secret cannot be retrieved again

Making Authenticated Requests

Include your credentials in the Authorization header using HTTP Basic Authentication:

curl -X GET https://api.payaca.com/v1/customers \
  -u "your-client-id:your-client-secret"

Or encode the credentials manually:

# Base64 encode "client-id:client-secret"
AUTH_HEADER=$(echo -n "your-client-id:your-client-secret" | base64)

curl -X GET https://api.payaca.com/v1/customers \
  -H "Authorization: Basic $AUTH_HEADER"

Webhooks

Webhooks allow you to receive real-time notifications when events occur in your Payaca account.

Registering a Webhook subscriber

Webhooks can be created through the Payaca provider web application:

  1. Navigate to My Company → Integrations
  2. Click "Create webhook"
  3. Provide the following details:
    1. name for the webhook
    2. URL for Webhook Delivery (must be publicly accessible)
    3. select the events you want to subscribe to (e.g. invoice.fullyPaid, scheduledEvent.created)
    4. provide a secret for Signature Verification - record this secret securely as it will not be retrievable later

Webhook Delivery

When a subscribed event occurs a POST request is made to the webhook URL with a JSON payload and signature from your provided secret.

Webhook Signature Verification

All webhook payloads include an X-Payaca-Signature header for verification, containing an HMAC-SHA256 signature of the payload

X-Payaca-Signature: a2114d57b48eac7b4cde7f32c991906e42c79dc606e60c5093f02c3afc567f78

Verification Process

  1. Compute Signature: Create HMAC-SHA256 hex digest of the entire request body, using your webhook secret
  2. Compare: Use timing-safe comparison to verify your signature matches the X-Payaca-Signature header.

Retry Logic

If you respond with HTTP 2XX or 4XX, we will not attempt to redeliver a webhook.

We will retry with exponential backoff in the following circumstances:

  • HTTP 5xx response,
  • Network errors
  • Response timeouts (up to 3 seconds)

Customers

Customers: Add Tags to Customer

Adds Tags to a Customer.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "customer": {
    }
}

Customers: Remove Tags from Customer

Removes Tags from a Customer.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "customer": {
    }
}

Customers: Update

Update an existing Customer.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
object or null

Provide values for any custom fields the Account has configured for their Customers. The key should be the custom field identifier

Responses

Request samples

Content type
application/json
{
  • "customFields": {
    }
}

Response samples

Content type
application/json
{
  • "customer": {
    }
}

Customers: Get

Get an existing Customer.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz

Responses

Response samples

Content type
application/json
{
  • "customer": {
    }
}

Customers: Create or update

Creates a new Customer, or if any Customer with an email exists, adds to that one instead. If multiple Customers are found, the earliest created one is used.

Authorizations:
basicAuth
Request Body schema: application/json
name
string or null
required
Array of objects non-empty
Array of objects or null
object or null

Provide values for any custom fields the Account has configured for their Customers. The key should be the custom field identifier

Responses

Request samples

Content type
application/json
{
  • "name": "Harper Property Management",
  • "contacts": [
    ],
  • "addresses": [
    ],
  • "customFields": {
    }
}

Response samples

Content type
application/json
{
  • "customer": {
    }
}

Customers: Add an address to a customer

Creates a new address against the Customer.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
required
Structured (object) or String (string)
isBillingAddress
boolean or null
Default: false
Array of objects or null

Responses

Request samples

Content type
application/json
{
  • "address": {
    },
  • "isBillingAddress": true,
  • "accessContacts": [
    ]
}

Response samples

Content type
application/json
{
  • "customer": {
    }
}

Projects

Project Pipeline Stage Changed Webhook

Project has been moved to a different pipeline stage.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "project.pipelineStageChanged"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "project.pipelineStageChanged"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "project.pipelineStageChanged",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Project Pipeline Changed Webhook

Project has been moved to a different pipeline.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "project.pipelineChanged"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "project.pipelineChanged"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "project.pipelineChanged",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Project Created Webhook

A new Project has been created.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "project.created"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "project.created"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "project.created",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Projects: Create

Creates a new project for the specified customer.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
reference
string or null
Structured (object) or String (string) or null
tags
Array of strings or null[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]
By title (object) or By id (object) or null

The pipeline to create the Project within

By title (object) or By id (object) or null

The stage of the pipeline to start the Project in. If set, pipeline must also be provided

object or null

The email address of the Payaca user to assign the Project to

notes
Array of strings or null
object or null

Provide values for any custom fieldsets the Account has configured for their Projects. The key should be the custom fieldset identifier

object or null

Responses

Request samples

Content type
application/json
{
  • "reference": "ABC123",
  • "siteAddress": {
    },
  • "tags": [
    ],
  • "pipeline": {
    },
  • "pipelineStage": {
    },
  • "assignTo": {
    },
  • "notes": [
    ],
  • "customFields": {
    },
}

Response samples

Content type
application/json
{
  • "project": {
    }
}

Projects: Add Tags to Project

Adds Tags to a Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "project": {
    }
}

Projects: Remove Tags from Project

Removes Tags from a Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "project": {
    }
}

Projects: Update

Updates an existing Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
object or null

Provide values for any custom fieldsets the Account has configured for their Projects. The key should be the custom fieldset identifier

By title (object) or By id (object) or null

The stage of the pipeline to start the Project in. If set, pipeline must also be provided

Responses

Request samples

Content type
application/json
{
  • "customFields": {
    },
  • "pipelineStage": {
    }
}

Response samples

Content type
application/json
{
  • "project": {
    }
}

Projects: Get

Get an existing Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz

Responses

Response samples

Content type
application/json
{
  • "project": {
    }
}

Projects: Get accepted

Get the accepted items and value for an existing Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz

Responses

Response samples

Content type
application/json
{
  • "project": {
    }
}

Webhooks

Webhooks Webhook

General purpose webhook endpoint for all Payaca events.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Enum: "invoice.fullyPaid" "project.created" "project.pipelineChanged" "project.pipelineStageChanged" "proposal.accepted" "proposal.markedAsSent" "proposal.sent" "scheduledEvent.archived" "scheduledEvent.assigned" "scheduledEvent.created" "scheduledEvent.edited" "scheduledEvent.rescheduled" "scheduledEvent.unassigned"
Request Body schema: application/json
object

See docs for each Event for more details

Responses

Request samples

Content type
application/json
{ }

Scheduled Events

Scheduled Event Created Webhook

A Scheduled Event has been created.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "scheduledEvent.created"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "scheduledEvent.created"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "scheduledEvent.created",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Scheduled Event Assigned Webhook

A Scheduled Event has been assigned to a User.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "scheduledEvent.assigned"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "scheduledEvent.assigned"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "scheduledEvent.assigned",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Scheduled Event Unassigned Webhook

A Scheduled Event has been unassigned from a User.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "scheduledEvent.unassigned"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "scheduledEvent.unassigned"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "scheduledEvent.unassigned",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Scheduled Event Rescheduled Webhook

A Scheduled Event has been rescheduled (start or end time changed).

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "scheduledEvent.rescheduled"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "scheduledEvent.rescheduled"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "scheduledEvent.rescheduled",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Scheduled Event Edited Webhook

A Scheduled Event name or description has been changed.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "scheduledEvent.edited"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "scheduledEvent.edited"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "scheduledEvent.edited",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Scheduled Event Archived Webhook

A Scheduled Event has been archived (soft deleted).

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "scheduledEvent.archived"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "scheduledEvent.archived"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "scheduledEvent.archived",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Scheduled Events: Add Tags to Scheduled Event

Adds Tags to a ScheduledEvent.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "scheduledEvent": {
    }
}

Scheduled Events: Remove Tags from Scheduled Event

Removes Tags from a ScheduledEvent.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "scheduledEvent": {
    }
}

Scheduled Events: Create

Creates a new scheduled event.

Authorizations:
basicAuth
Request Body schema: application/json
projectId
string or null
name
required
string [ 1 .. 255 ] characters
description
string or null <= 6000 characters
beginAt
required
string <date-time>
endAt
required
string <date-time>
tags
Array of strings or null[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]
Array of objects or null
Project site address (object) or Customer address (object) or New address (object) or null
Array of Primary Customer contact (object) or Existing contact (object) or New contact (object) or null

A list of contacts who will be notified when an event confirmation or event reminder is sent.

Responses

Request samples

Content type
application/json
{
  • "projectId": "ABC123",
  • "name": "string",
  • "description": "string",
  • "beginAt": "2019-08-24T14:15:22Z",
  • "endAt": "2019-08-24T14:15:22Z",
  • "tags": [
    ],
  • "assignTo": [
    ],
  • "location": {
    },
  • "contactsToNotify": [
    ]
}

Response samples

Content type
application/json
{
  • "scheduledEvent": {
    }
}

Scheduled Events: Delete

Delete a scheduled event.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: abc123xyz789

The ID of the scheduled event

Responses

Response samples

Content type
application/json
{
  • "message": "Something went wrong"
}

Scheduled Events: Update

Update a scheduled event. Only name, description, beginAt, and endAt fields can be updated.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: abc123xyz789

The ID of the scheduled event

Request Body schema: application/json
name
string [ 1 .. 255 ] characters
description
string or null <= 6000 characters
beginAt
string <date-time>
endAt
string <date-time>

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "beginAt": "2019-08-24T14:15:22Z",
  • "endAt": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "scheduledEvent": {
    }
}

Invoices

Invoice Fully Paid Webhook

An Invoice has been fully paid.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "invoice.fullyPaid"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "invoice.fullyPaid"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "invoice.fullyPaid",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Invoices: Create

Creates an Invoice against the specified Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
isDepositInvoice
boolean or null
Default: false

If true, the Invoice will be marked as a deposit Invoice. Only the first Invoice created against a Project can be a deposit Invoice.

required
Amount (object) or Percentage (object) or Total remaining (object)
dueInDays
integer or null > 0

After being sent, the Invoice will be due in this many days. If not provided, will fall back to the account default.

Send (object) or Mark as sent (object) or Action (null) (Action)

Optional action to perform after the Invoice has been created - for example, sending the Invoice to the customer.

Responses

Request samples

Content type
application/json
{
  • "isDepositInvoice": false,
  • "invoiceValue": {
    },
  • "dueInDays": 30,
  • "action": {
    }
}

Response samples

Content type
application/json
{
  • "invoice": {
    },
  • "actionState": {
    }
}

Invoices: Create Next

Creates the next Invoice against the specified Project according to the payment schedule.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
dueInDays
integer or null > 0

After being sent, the Invoice will be due in this many days. If not provided, will fall back to the account default.

Send (object) or Mark as sent (object) or Action (null) (Action)

Optional action to perform after the Invoice has been created - for example, sending the Invoice to the customer.

Responses

Request samples

Content type
application/json
{
  • "dueInDays": 30,
  • "action": {
    }
}

Response samples

Content type
application/json
{
  • "invoice": {
    },
  • "actionState": {
    }
}

Proposals

Proposal Accepted Webhook

A Proposal has been accepted by the Customer, or marked as accepted by a Payaca user.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "proposal.accepted"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "proposal.accepted"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "proposal.accepted",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Proposal Sent Webhook

A Proposal has been sent to the Customer.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "proposal.sent"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "proposal.sent"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "proposal.sent",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Proposal Marked As Sent Webhook

A Proposal has been marked as sent.

Authorizations:
basicAuth
header Parameters
x-payaca-signature
required
string

Signature of the webhook payload

x-payaca-event
required
string
Value: "proposal.markedAsSent"
Request Body schema: application/json
apiVersion
required
string
occurredAt
required
string <date-time>

The time the event occurred

eventName
required
string
Value: "proposal.markedAsSent"
required
object
deliveredAt
required
string <date-time>

The time when the webhook was delivered

Responses

Request samples

Content type
application/json
{
  • "apiVersion": "1.0",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "eventName": "proposal.markedAsSent",
  • "payload": {
    },
  • "deliveredAt": "2019-08-24T14:15:22Z"
}

Proposal: Create

Creates a Proposal against the specified Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
reference
string or null
validForDays
integer or null
notes
string or null

Additional notes for the proposal. Markdown formatting is supported.

introduction
string or null

Introduction text for the proposal. Markdown formatting is supported.

object or null
required
Array of objects non-empty

Responses

Request samples

Content type
application/json
{
  • "reference": "ABC123",
  • "validForDays": 30,
  • "notes": "We provide the best services in the industry, and have been two-time winners of the _best company_ award.",
  • "introduction": "Hello **John Doe**, please see the details of your proposal below.",
  • "paymentSchedule": {
    },
  • "itemGroups": [
    ]
}

Response samples

Content type
application/json
{
  • "proposal": {
    }
}

Custom Fieldsets

Custom Fieldsets: Get all for the associated entity type

Get all custom fieldset definitions for the associated entity type

Authorizations:
basicAuth
path Parameters
assocEntityType
required
string
Enum: "project" "customer"

The type of entity to which custom fieldsets are associated

Responses

Response samples

Content type
application/json
{
  • "customFields": [
    ]
}

Custom Fieldsets: Create for the associated entity type

Create for the associated entity type

Authorizations:
basicAuth
path Parameters
assocEntityType
required
string
Enum: "project" "customer"

The type of entity to which custom fieldsets are associated

Request Body schema: application/json
identifier
string or null <= 255 characters ^[a-zA-Z0-9-]+$

A unique identifier for the custom field - this will be auto generated if none provided

label
required
string <= 1023 characters

A readable field label

description
string or null <= 1023 characters

A description to help users understand the purpose of the field

type
required
string
Value: "fieldset"
required
Array of Select field (object) or Simple field (object) or Upload field (object) [ 1 .. 100 ] items

Responses

Request samples

Content type
application/json
{
  • "identifier": "myCustomField",
  • "label": "My custom field",
  • "description": "Please leave this field blank if you are unsure",
  • "type": "fieldset",
  • "children": [
    ]
}

Response samples

Content type
application/json
{
  • "customFields": [
    ]
}

Custom Fieldsets: Create within a specific fieldset

Create within a specific fieldset

Authorizations:
basicAuth
path Parameters
assocEntityType
required
string
Enum: "project" "customer"

The type of entity to which custom fieldsets are associated

fieldsetIdentifier
required
string
Request Body schema: application/json
Any of
identifier
string or null <= 255 characters ^[a-zA-Z0-9-]+$

A unique identifier for the custom field - this will be auto generated if none provided

label
required
string <= 1023 characters

A readable field label

description
string or null <= 1023 characters

A description to help users understand the purpose of the field

type
required
string
Value: "select"
options
required
Array of strings [ 1 .. 20 ] items [ items <= 255 characters ]

Responses

Request samples

Content type
application/json
Example
{
  • "identifier": "myCustomField",
  • "label": "My custom field",
  • "description": "Please leave this field blank if you are unsure",
  • "type": "select",
  • "options": [
    ]
}

Response samples

Content type
application/json
{
  • "identifier": "myCustomField",
  • "label": "My custom field",
  • "description": "Please leave this field blank if you are unsure",
  • "exampleValue": true,
  • "schema": "{\"type\":[\"boolean\",\"null\"],\"$schema\":\"http://json-schema.org/draft/2020-12/schema\"}",
  • "type": "fieldset",
  • "children": [
    ]
}

Tags

Tags: Get all

Get all tags

Authorizations:
basicAuth
query Parameters
offset
integer or null >= 0
Default: 0
limit
integer ( 0 .. 100 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "tags": {
    }
}

Tags: Create

Create a new Tag

Authorizations:
basicAuth
Request Body schema: application/json
name
required
string [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0...

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "tag": {
    }
}

Tax Rates

Tax Rates: Get all

Get all tax rates

Authorizations:
basicAuth
query Parameters
offset
integer or null >= 0
Default: 0
limit
integer ( 0 .. 100 ]
Default: 50

Responses

Response samples

Content type
application/json
{
  • "taxRates": {
    }
}

Addresses

Addresses: Add a contact to an address

Creates a new contact against the address.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
fullName
required
string
email
string or null
phoneNumber
string or null
description
string or null

Responses

Request samples

Content type
application/json
{
  • "fullName": "John Doe",
  • "email": "john.doe@email.com",
  • "phoneNumber": "+44 7777 777777",
  • "description": "Very friendly and helpful"
}

Response samples

Content type
application/json
{
  • "address": {
    }
}

Email Templates

Email Templates: List

Get all HTML email templates for the account.

Authorizations:
basicAuth

Responses

Response samples

Content type
application/json
{
  • "emailTemplates": [
    ],
  • "total": 5
}

Email Templates: Create

Create a new HTML email template.

Authorizations:
basicAuth
Request Body schema: application/json
name
required
string [ 1 .. 255 ] characters

The name of the email template

type
required
string
Enum: "AUTOMATION_TEMPLATE_ESTIMATE" "AUTOMATION_TEMPLATE_EVENT" "AUTOMATION_TEMPLATE_INVOICE" "AUTOMATION_TEMPLATE_PROJECT" "AUTOMATION_TEMPLATE_PROPOSAL" "AUTOMATION_TEMPLATE_QUOTE" "INVOICE" "PROPOSAL"

The type of email template

template
required
string non-empty

The HTML template content with variable placeholders

Responses

Request samples

Content type
application/json
{
  • "name": "Invoice Email Template",
  • "type": "INVOICE",
  • "template": "<html><body>See {{invoice.clientUrl}}</body></html>"
}

Response samples

Content type
application/json
{
  • "emailTemplate": {
    }
}

Email Templates: Get

Get a single HTML email template by its ID.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: abc123xyz789

The ID of the email template

Responses

Response samples

Content type
application/json
{
  • "emailTemplate": {
    }
}

Email Templates: Update

Update an existing HTML email template.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: abc123xyz789

The ID of the email template

Request Body schema: application/json
name
string [ 1 .. 255 ] characters

The name of the email template

template
string non-empty

The HTML template content with variable placeholders

Responses

Request samples

Content type
application/json
{
  • "name": "Invoice Email Template",
  • "template": "<html><body>See {{invoice.clientUrl}}</body></html>"
}

Response samples

Content type
application/json
{
  • "emailTemplate": {
    }
}

Email Templates: Delete

Delete an HTML email template. Templates that are in use by automations cannot be deleted.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: abc123xyz789

The ID of the email template

Responses

Response samples

Content type
application/json
{
  • "message": "Something went wrong"
}

Materials

Materials: Add Tags to Material

Adds Tags to a Material.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "material": {
    }
}

Materials: Remove Tags from Material

Removes Tags from a Material.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
tagNames
required
Array of strings[ items [ 1 .. 30 ] characters /^((\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud0... ]

Responses

Request samples

Content type
application/json
{
  • "tagNames": [
    ]
}

Response samples

Content type
application/json
{
  • "material": {
    }
}

Project Notes

Project Notes: Create

Creates Notes against the specified Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
Array ([ 1 .. 10 ] items)
string

Responses

Request samples

Content type
application/json
[
  • "Design and estimate required"
]

Response samples

Content type
application/json
{
  • "notes": [
    ]
}

Payments

Payments: Create

Creates a Payment against the specified Project.

Authorizations:
basicAuth
path Parameters
id
required
string
Example: xyz
Request Body schema: application/json
invoiceId
string or null

If an Invoice ID is provided, this payment will preferentially reconcile against the specified invoice. Otherwise, this payment will reconcile against any sent unpaid Invoices on the Project in order of date sent.

paymentMethod
required
string
Enum: "BACS" "FINANCE_PAYOUT" "UNKNOWN" "OTHER" "CASH" "CARD" "CHEQUE"
paymentValue
required
integer >= 1

Payment value in minor currency units, i.e. pennies

receivedAt
string or null <date-time>

The date and time when the payment was received. If not provided, will default to the current date and time.

sendReceipt
boolean or null
Default: false

When true, sends a receipt email to the Customer. Defaults to false if not provided.

Responses

Request samples

Content type
application/json
{
  • "invoiceId": "ABC123",
  • "paymentMethod": "BACS",
  • "paymentValue": 10000,
  • "receivedAt": "2023-10-01T12:00:00Z",
  • "sendReceipt": true
}

Response samples

Content type
application/json
{
  • "payment": {
    }
}