Projetly - Make API
Projetly's API for Make Integration
Projetly is an AI-powered platform that helps teams streamline customer onboarding, manage projects, automate workflows, and collaborate with customers in digital sales rooms. It keeps companies, contacts, deals, projects, and tasks organized across the whole customer lifecycle, from first touch through closed deal to delivery.
The Projetly Make integration connects Projetly to Make, so teams can automate work without writing code, for example, create a contact when a form is submitted, start a project when a deal is won, or notify a channel when a task changes. The integration talks to Projetly over the REST API described in this document: it reads and writes companies, contacts, projects/deals, tasks, users, and templates, and manages webhook subscriptions so Make scenarios can trigger on Projetly events.
Base URLs
Marketplace API — data, templates, users, tasks, webhooks
https://market.api.projetly.io/api
Identity / OAuth host — /oauth/authorize, /oauth/token, /auth_refresh/
https://api.projetly.io/api
All endpoint paths below are relative to one of these two bases (each endpoint notes which). A trailing slash is accepted — /make/company and /make/company/ are equivalent.
Getting App credentials
The client_id and client_secret are issued by Projetly — they are not self-service. To request them, email admin@projetly.ai with your app details:
App name — the name of your integration.
Description — what the integration does.
Permissions (scopes) — the OAuth2 scopes your app needs (e.g.
company.read,deal.write).Endpoints — the API paths you intend to call (e.g.
/make/company,/make/project,/webhook/subscribe).
Projetly replies with your client_id, client_secret, and an Azure Functions key. Pass the function key either as the x-functions-key header or as a code query parameter (?code=<function-key>) — both are accepted.
Authentication
Obtaining an access token uses the OAuth2 authorization-code flow. After that, every data / template / user / task / webhook request must carry three things:
Bearer token —
Authorization: Bearer <access_token>(a JWT).HMAC request signature — two headers proving the request came from the registered integration:
X-OAuth-Timestamp— current Unix time in seconds.X-OAuth-Signature—HMAC-SHA256(key = CLIENT_SECRET, message = "<CLIENT_ID>:<X-OAuth-Timestamp>"), hex-encoded.
Azure Functions key —
x-functions-key: <function-host-key>.
The OAuth endpoints themselves (/oauth/authorize, /oauth/token, /auth_refresh/) do not require the three headers above — they authenticate with the client credentials carried in the request.
Token flow at a glance
Security schemes
oauth2
OAuth2 (authorization code)
—
authorize: …/oauth/authorize/, token: …/oauth/token/, refresh: …/auth_refresh/
bearerAuth
HTTP bearer (JWT)
header
Authorization: Bearer <token>
oauthTimestamp
API key
header
X-OAuth-Timestamp
oauthSignature
API key
header
X-OAuth-Signature (HMAC-SHA256, see above)
functionsKey
API key
header
x-functions-key
OAuth2 scopes
deal.read / deal.write
Read / create-update deals
project.read / project.write
Read / create-update projects
company.read / company.write
Read / create-update companies
contact.read / contact.write
Read / create-update contacts
template.read / template.write
Read / write templates
user.read / user.write
Read / write users
Conventions
Timestamps are ISO-8601 UTC, e.g.
2026-06-05T07:46:23.312Z.List endpoints wrap results in a
resultsarray and may return anext_cursorfor cursor pagination, or acceptpage/items_per_pagefor offset pagination.Extra fields: object schemas are open (
additionalProperties: true). The documented properties are the ones the integration relies on; responses may carry additional fields.Mode-switching endpoints: several GET endpoints change what they return based on a query parameter (e.g.
options,field_config,company_id,contact_id,milestone). These modes are documented per endpoint.
Common query parameters
limit
integer
—
Maximum number of records to return.
sort
string
—
Sort field; prefix with - for descending (e.g. -creation_time).
filter
string
—
JSON-encoded filter condition array.
next_cursor
string
—
Cursor token from a previous list response.
options
string
—
When set on supported endpoints, returns metadata option sets instead of records.
field_config
string
—
When truthy, returns the resource field configuration.
page
integer
—
1-indexed page number (offset pagination).
items_per_page
integer
—
Records per page (offset pagination).
due_filter
string
—
Relative due-date range: show_all, today, tomorrow, yesterday, current_week, next_week, last_week, current_month, next_month, last_month.
Common error responses
All endpoints share the error envelope { "status": "error", "message": "…" } or { "error": "…" } and these status codes:
400
Bad Request — invalid or missing data.
401
Unauthorized — invalid/missing credentials or signature.
403
Forbidden — caller lacks permission (e.g. disallowed event scope).
404
Not Found — resource does not exist.
409
Conflict — resource already exists.
429
Too Many Requests — an API rate limit was hit.
500
Internal Server Error.
See the Error model for the body shape.
Endpoints
Authentication endpoints
Base: https://api.projetly.io/api
GET /oauth/authorize — Begin the authorization-code flow
Auth: Credentials Required.
Redirects the user to Projetly to grant access; on approval Projetly redirects back to redirect_uri with code and state.
client_id
string
yes
OAuth app client ID.
response_type
string (code)
yes
Must be code.
redirect_uri
string (uri)
yes
URL Projetly redirects back to.
state
string
yes
Opaque value echoed back to prevent CSRF.
timestamp
string
yes
Unix time (seconds) used in the signature.
signature
string
yes
HMAC-SHA256(key = CLIENT_SECRET, message = "<client_id>:<timestamp>"), hex-encoded.
Responses
POST /oauth/token — Exchange an authorization code for tokens
Auth: Credentials Required.
Content-Type: application/x-www-form-urlencoded.
code
string
yes
Authorization code from the authorize redirect.
client_id
string
yes
OAuth app client ID.
grant_type
string (authorization_code)
yes
Must be authorization_code.
redirect_uri
string (uri)
yes
Same redirect URI used in authorize.
Responses
POST /auth_refresh/ — Refresh an access token
Auth: Credentials Required.
Content-Type: application/x-www-form-urlencoded.
token
string
yes
The current refresh token.
grant_type
string (refresh_token)
yes
Must be refresh_token.
Responses
Connection
Base: https://market.api.projetly.io/api
GET /make/test — Verify the integration is active
Auth: Required.
Returns the linked organisation name and Make app id; used as the connection test/label.
Responses
Companies
Base: https://market.api.projetly.io/api
GET /make/company — List companies, fetch one, or options / field config
Auth: Required.
Default returns a paginated company list. Modes:
company_id=<id>→ a singleCompany.options=options→ metadata option sets (types, segments, industries, revenue/employee ranges) instead of company records.field_config=<truthy>→ the company field configuration.
limit, sort, filter, next_cursor
—
no
See common params.
company_id
string
no
When set, returns the single matching company.
options, field_config
string
no
Mode switches.
Responses
200
Company list, a single company, options metadata, or field config depending on mode.
POST /make/company — Create a company
Auth: Required.
Body: CreateCompanyRequest.
Responses
200
{ "data": [Company](#company) }
Company created — returns the new record under data.
201
{ "data": [Company](#company) }
Company created — returns the new record under data.
PUT /make/company/{company_id} — Update a company
Auth: Required.
Body: CreateCompanyRequest.
company_id
string
yes
Company to update. Get the id from GET /make/company (list) or from the POST /make/company response (data.company_id).
Responses
200
{ "data": [Company](#company) }
Company updated; returns the full updated record under data.
PUT /make/{module}/field-config — Update field configuration
Auth: Required.
Adds field definitions to the existing company or contact field configuration. Incoming definitions are merged with the existing definitions.
Body: FieldConfigUpdateRequest.
module
string
yes
Resource to update. Must be company or contact.
Responses
Contacts
Base: https://market.api.projetly.io/api
GET /make/contact — List contacts, fetch one, or options / field config
Auth: Required.
Default returns a paginated contact list. Modes:
contact_id=<id>→ a singleContact.options=options→ contact metadata option sets.field_config=<truthy>→ the contact field configuration.
limit, sort, filter, next_cursor
—
no
See common params.
contact_id
string
no
When set, returns the single matching contact. Get the id from GET /make/contact (list) or from the POST /make/contact response (data.contact_id).
options, field_config
string
no
Mode switches.
Responses
200
Contact list, a single contact, options metadata, or field config depending on mode.
POST /make/contact — Create a contact
Auth: Required.
Body: CreateContactRequest.
Responses
200
{ "data": [Contact](#contact) }
Contact created — returns the new record under data.
201
{ "data": [Contact](#contact) }
Contact created — returns the new record under data.
PUT /make/contact/{contact_id} — Update a contact
Auth: Required.
Body: CreateContactRequest.
contact_id
string
yes
Contact to update. Get the id from GET /make/contact (list) or from the POST /make/contact response (data.contact_id).
Responses
200
{ "data": [Contact](#contact) }
Contact updated; returns the full updated record under data.
Templates
Base: https://market.api.projetly.io/api
GET /make/templates — List templates or fetch a specific template
Auth: Required.
Lists pipeline / deal-stage / project templates. When org_temp_id is provided, returns that single template.
module
string
no
Template module, e.g. templates.
template_type
string
no
Category: pipelines, deal_stages, project.
sub_template_type
integer
no
Sub-type filter (e.g. 4, 5, 6).
page
integer
no
Offset page (1-indexed). Omitted when org_temp_id is provided.
items_per_page
integer
no
Records per page. Defaults to 60 when org_temp_id is provided.
org_temp_id
string
no
Fetch a specific template by id.
Responses
Projects & Deals
Base: https://market.api.projetly.io/api. Projects and deals are the same resource, distinguished by module / project_type.
GET /make/project — List projects or deals
Auth: Required.
Returns the paginated upstream project/info/ response envelope: count, next, previous, results, and max_page_limit.
Projects:
module=projects,project_type=project.Deals:
module=deal_plan,project_type=deal.
page, items_per_page
integer
no
Offset pagination.
project_type
string
no
project or deal.
module
string
no
projects or deal_plan.
org_temp_id
string
no
Template id filter passed to the project API.
sort, filter, due_filter
—
no
See common params.
Responses
POST /make/project — Create a project or deal
Auth: Required.
Body: CreateProjectRequest.
Responses
GET /make/project/{project_id} — Project milestones payload, options, or milestones
Auth: Required.
Fetches a project's milestone payload from the Projetly API via the upstream project/info/milestones/ API. The Make handler always fetches the full milestone payload first, then returns one of three response shapes:
Default → the full
ProjectInfopayload returned byget_project_milestones.options=true→ returns only the payload'sProjectOptionsResponseobject.milestone=trueormilestones=true→ returns only the payload's milestones under{ "results": [...] }.
project_id
path
string
yes
Target project. Get the id from GET /make/project (list) or from the POST /make/project response (project_id).
due_filter
query
string
no
Relative due-date range. Defaults to show_all.
options
query
boolean
no
true → return the upstream options object.
milestone
query
boolean
no
true → return milestone records under results.
milestones
query
boolean
no
Alias for milestone=true.
Responses
200
Full milestone payload, project options, or milestone records depending on mode.
GET /make/deal/options — Fetch deal creation options
Auth: Required.
Returns metadata used to create deals, such as available pipelines, deal stages, and field choices. The exact response shape is an open object returned by the upstream project API.
Responses
Users
Base: https://market.api.projetly.io/api
GET /make/users — List organization users
Auth: Required.
Returns organization users. When email is provided, the response is filtered to users whose email exactly matches the provided value.
email
string
no
Exact email address to filter by.
Responses
Tasks
Base: https://market.api.projetly.io/api
GET /make/tasks — List a project's tasks
Auth: Required.
Fetches a project's milestones and flattens every milestone's tasks into a single results array.
project_id
string
yes
Project whose tasks to fetch. Get the id from GET /make/project (list) or from the POST /make/project response.
due_filter
string
no
Relative due-date range. Defaults to show_all.
filter
string
no
JSON-encoded filter.
items_per_page
integer
no
Records per page. Defaults to 10.
page
integer
no
1-indexed page number.
Responses
POST /make/task — Create a task
Auth: Required.
Body: CreateTaskRequest.
Responses
Integration Management
Base: https://market.api.projetly.io/api
DELETE /make/invalidate — Revoke and remove the Make integration
Auth: Required.
Permanently removes the stored Make integration record for the organisation and deletes webhook dispatches associated with the integration app id.
Responses
Webhooks
Base: https://market.api.projetly.io/api. REST-hook subscription management.
POST /webhook/subscribe — Subscribe to event webhooks
Auth: Required.
Body: WebhookSubscribeRequest. events is a string containing a list literal, e.g. "['company_created']". For task events, project_id scopes delivery to one project.
Responses
DELETE /webhook/unsubscribe — Unsubscribe from event webhooks
Auth: Required.
subscriptionId
string
yes
The id returned from subscribe.
Responses
Data models
All objects are open (may contain extra fields). Types use JSON conventions (string, integer, number, boolean, array, object, null).
Error
Standard error envelope.
status
string
"error" on handled errors.
error
message
string
Human-readable error message.
Invalid request body
error
string
Present on auth/signature errors.
Invalid signature
TokenResponse
access_token
string
OAuth access token (JWT).
eyJhbGci7892xx
refresh_token
string
OAuth refresh token used to renew access.
def5027892xx
token_type
string
Token scheme; always Bearer.
Bearer
expires_in
integer
Access-token lifetime in seconds.
3600
Address
country
string
Country name.
United States
state
string
State / province / region.
New York
city
string
City or town.
New York
address
string
Street address line.
350 Fifth Avenue
zip_code
string
Postal / ZIP code.
10118
OwnerRef
Reference to a user (owner).
user_id
string
Owning user's id.
7892xxxxxxxxxxxx
full_name
string
Owning user's full name.
Sample First Last
email
string
Owning user's email.
sample@mail.com
role
string
User role.
admin, member
profile_image
string | null
Profile image URL.
https://sample.com
StatusRef
id
string | integer
Status id.
1
status_id
string | integer
Status id when returned under status_id.
1
status_key
string
Machine key for the status.
in_progress, not_started
status_name
string
Human-readable status label.
In Progress, Not Started
color
string
Status color.
#50C878
icon
string
Status icon class.
fa-solid fa-circle-check
Company
id
string
Internal record id.
7892xxxxxxxxxxxx
company_id
string
Company id.
7892xxxxxxxxxxxx
display_id
string
Human-readable display id.
COMPANY_0302
company_name
string
Company name.
Sample Company
domain
string
Website / domain.
https://sample.com
linkedin_url
string
LinkedIn company URL.
https://linkedin.com/company/sample
twitter_url
string
Twitter/X profile URL.
https://sample.com
hq_country
string
Headquarters country.
United States
industry
string
Vertical / industry.
Education, SaaS
employee_range
string
Employee-count range key.
11-50, 51-200
estimated_arr
string
ARR range key.
5_10m, 50m+
employees
integer | null
Number of linked contacts.
0
description
string
Free-text company description.
Sample description
logo_url
string | null
Company logo URL.
https://sample.com
company_type
string
Company classification.
prospect, customer
lead_status
string
Lead status key.
new, contacted
lead_status_pipeline_id
string
Pipeline the lead status belongs to.
7892xxxxxxxxxxxx
operating_regions
list
List of strings — regions the company operates in.
["Africa", "Europe"]
customer_segment
string
Customer segment.
mid_market, enterprise
icp_fit
string
Ideal-customer-profile fit.
excellent, good
connection_strength
string
Strength of the relationship.
very_strong, weak
connection_source
string
How the connection originated.
founder, referral
vendor_being_replaced
string | null
Incumbent vendor being replaced.
Acme CRM
replacement_urgency
string | null
Urgency of replacing the vendor.
low, high
category
string
Company category.
marketing, sales
record_source
string
Where the record came from.
ui, integration
partner_type
string | null
Partner type.
implementation_partner
parent_company
object | null
Parent company reference.
{ "company_id": "7892xxxx" }
investors
list
Investor references.
[]
partners
list
Partner company references.
[]
subsidiaries
list
Subsidiary company references.
[]
locations
list
Additional company locations.
[]
contacts_count
integer
Number of linked contacts.
0
is_draft
boolean
Save as a draft instead of finalized.
false
custom_fields
object
Arbitrary custom field key/values.
{ "tier": "gold" }
external_map
object | null
External-system mapping.
{ "project_id": "7892xxxx", "project_flag": true }
associated_deal_project
object { deals, projects }
Associated deals and projects in list responses.
{ "deals": [], "projects": [] }
created_by
string
User id that created the record.
7892xxxxxxxxxxxx
last_updated_by
string
User id of the last editor.
7892xxxxxxxxxxxx
creation_time
string (date-time)
When the record was created.
2026-06-05T07:46:23.312Z
last_update_time
string (date-time)
When the record was last updated.
2026-06-05T07:46:23.312Z
CompanyListResponse
count
integer
Number of records in the current response.
20
has_next
boolean
Whether another page is available.
true
has_previous
boolean
Whether a previous page is available.
false
next_cursor
string | null
Cursor for the next page, or null when exhausted.
eyJjdXxxxxx...
previous_cursor
string | null
Cursor for the previous page when returned.
eyJwcmV2...
CreateCompanyRequest
Required: company_name.
company_name
string
yes
Company name.
Sample Company
domain
string
no
Website / domain.
https://sample.com
linkedin_url
string
no
LinkedIn company URL.
https://linkedin.com/company/sample
twitter_url
string
no
Twitter/X profile URL.
https://sample.com
description
string
no
Free-text company description.
Sample description
lead_status_pipeline_id
string
no
Pipeline the lead status belongs to. Obtain from your Projetly pipeline configuration.
7892xxxxxxxxxxxx
parent_company
string
no
Parent company name.
Sample Parent
parent_company_id
string
no
Parent company id to link under. Get from GET /make/company (list).
7892xxxxxxxxxxxx
operating_regions
list
no
List of strings — regions the company operates in.
["Africa", "Europe"]
category
string
no
Company category.
marketing, sales
industry
string
no
Vertical / industry.
Education, SaaS
company_owner
string
no
User id of the owner. Get from GET /make/users.
7892xxxxxxxxxxxx
customer_segment
string
no
Customer segment.
mid_market, enterprise
icp_fit
string
no
Ideal-customer-profile fit.
excellent, good
company_type
string
no
Company classification.
prospect, customer
connection_source
string
no
How the connection originated.
founder, referral
vendor_being_replaced
string
no
Incumbent vendor being replaced.
Acme CRM
estimated_arr
string
no
Range key resolved from a numeric ARR.
5_10m, 50m+
employee_range
string
no
Range key resolved from a numeric employee count.
11-50, 51-200
record_source
string
no
Where the record came from.
integration
is_draft
boolean
no
Save as a draft instead of finalized.
false
custom_fields
object
no
Arbitrary custom field key/values.
{ "tier": "gold" }
Contact
id
string
Internal record id.
7892xxxxxxxxxxxx
contact_id
string
Contact id.
7892xxxxxxxxxxxx
display_id
string
Human-readable display id.
CONTACT_0007
full_name
string
Full display name.
Sample First Last
first_name
string
Given name.
Sample First
last_name
string
Family name.
Sample Last
primary_email
string
Primary work email.
sample@mail.com
secondary_emails
list
List of strings — additional email addresses.
["sample@mail.com"]
primary_phone
string
Primary phone number.
+1 1234567xxx
phone
object { primary }
Phone object with a primary number.
{ "primary": "+1 1234567xxx" }
phones
list
List of objects — additional phone entries.
[{ "primary": "+1 1234567xxx" }]
company
list
List of objects { company_id, company_name } — linked companies.
[{ "company_id": "7892xxxx", "company_name": "Sample Company" }]
company_ids
list
List of strings — linked company ids.
["7892xxxxxxxxxxxx"]
lead_source
string
Where the contact originated.
integration
lead_status
string
Lead status key.
new, contacted
lead_status_pipeline_id
string
Pipeline the lead status belongs to.
7892xxxxxxxxxxxx
contact_stage
string
Stage in the contact lifecycle.
lead, qualified
job_title
string
Role/title at the company.
VP, CEO, Manager
department
string
Department the contact belongs to.
Engineering, Sales
timezone
string
IANA timezone.
Asia/Calcutta
language
string
Preferred language (ISO code).
en
person_category
object { key, name }
Contact category.
{ "key": "prospect", "name": "Prospect" }
preferred_communication_channel
string
Preferred communication channel.
email, phone
seniority_level
string
Seniority level.
ic, manager, exec
buying_role
string
Role in the buying process.
decision maker, influencer
signoff_authority
string
Whether the contact can sign off.
yes, no
do_not_contact
string
Do-not-contact flag.
yes, no
influence_level
number
Influence score.
0
interest_level
number
Interest score.
0
whatsapp_number
string
WhatsApp contact number.
+1 1234567xxx
campaign
string
Source marketing campaign.
Spring Outreach
internal_notes
string
Free-text internal notes.
Met at conference
linkedin_url
string
LinkedIn profile URL.
https://linkedin.com/in/sample
twitter_url
string
Twitter/X profile URL.
https://sample.com
created_by
string
User id that created the record.
7892xxxxxxxxxxxx
creation_time
string (date-time)
When the record was created.
2026-06-05T05:18:01.443Z
last_update_time
string (date-time)
When the record was last updated.
2026-06-05T05:18:01.443Z
ContactListResponse
count
integer
Number of records in the current response.
20
has_next
boolean
Whether another page is available.
true
has_previous
boolean
Whether a previous page is available.
false
next_cursor
string | null
Cursor for the next page, or null when exhausted.
eyJjdXxxxxx...
previous_cursor
string | null
Cursor for the previous page when returned.
eyJwcmV2...
CreateContactRequest
Required: primary_email, first_name.
primary_email
string
yes
Primary work email; unique per contact.
sample@mail.com
first_name
string
yes
Contact's given name.
Sample First
last_name
string
no
Contact's family name.
Sample Last
full_name
string
no
Display name; derived from first/last if omitted.
Sample First Last
primary_phone
string
no
Primary phone number.
+1 1234567xxx
job_title
string
no
Role/title at the company.
VP, CEO, Manager
linkedin_url
string
no
LinkedIn profile URL.
https://linkedin.com/in/sample
twitter_url
string
no
Twitter/X profile URL.
https://sample.com
whatsapp_number
string
no
WhatsApp contact number.
+1 1234567xxx
secondary_emails
list
no
List of strings — additional email addresses.
["sample@mail.com"]
phones
list
no
List of strings — additional phone numbers.
["+1 1234567xxx"]
phone
object { primary }
no
Phone object with a primary number.
{ "primary": "+1 1234567xxx" }
company_ids
list
no
List of strings — linked company ids. Get ids from GET /make/company (list).
["7892xxxxxxxxxxxx"]
department
string
no
Department the contact belongs to.
Engineering, Sales
lead_status
string
no
Lead status key.
new, contacted
lead_status_pipeline_id
string
no
Pipeline the lead status belongs to. Obtain from your Projetly pipeline configuration.
7892xxxxxxxxxxxx
contact_owner
string
no
User id of the owner. Get from GET /make/users.
7892xxxxxxxxxxxx
language
string
no
Preferred language (ISO code).
en
campaign
string
no
Source marketing campaign.
Spring Outreach
internal_notes
string
no
Free-text internal notes.
Met at conference
buying_role
string
no
Role in the buying process.
decision maker, influencer
person_category
string
no
Contact category.
prospect, customer
communication_channel
string
no
Preferred communication channel.
email, phone
lead_source
string
no
Where the contact originated.
integration
is_draft
boolean
no
Save as a draft instead of finalized.
false
custom_fields
object
no
Arbitrary custom field key/values.
{ "tier": "gold" }
ProjectOrDeal
project_id
string
Project / deal id.
7892xxxxxxxxxxxx
project_name
string
Project / deal name.
Sample Project
description
string
Free-text description.
Sample description
start_date
string (date-time)
Start date.
2026-03-17T18:30:00Z
due_date
string (date-time)
Due date.
2026-06-24T18:30:00Z
project_score
number
Health / score value.
75
tasks_count
integer
Number of tasks.
12
milestones_count
integer
Number of milestones.
7
phase
object
Current phase metadata.
{}
tags
list
Project tags.
[]
project_manager
object
Project manager metadata.
{}
is_arr
boolean
Whether revenue is recurring (ARR).
false
revenue
string
Formatted revenue.
25000
show_forecasted_date
boolean
Whether a forecasted date is shown.
false
forecasted_date
string (date-time) | null
Forecasted completion date.
2026-06-24T18:30:00Z
project_fee
number | null
One-time project fee.
0
expected_deal_value
number | null
Expected deal value.
0
health_score
number
Health score value.
75
account_img
string
Linked account image path or URL.
assets/images/companies/img-1.png
account_name
string
Linked account / company name.
Sample Company
insights
object
Project insight metadata.
{ "key": "on_time", "text": "On Time" }
progress
object
Task progress counters by status.
{ "completed": 13, "total_tasks": 669 }
template_id
string
Template the project was created from.
7892xxxxxxxxxxxx
region
string
Region.
North America, EMEA
project_type
string
Distinguishes a project from a deal.
project, deal
project_type_str
string
Display label key for the project type.
UI.pr_onboarding
project_customers
list
List of objects { full_name, email, role } — customer participants.
[{ "full_name": "Sample First Last", "email": "sample@mail.com", "role": "sponsor" }]
account_id
string
Linked account / company id.
7892xxxxxxxxxxxx
customer_project_owner
object { name, full_name, email }
Customer-side project owner.
{ "name": "Sample", "full_name": "Sample First Last", "email": "sample@mail.com" }
external_map
object { project_id, project_flag } | null
External-system mapping.
{ "project_id": "7892xxxx", "project_flag": true }
follow_up_project_data
object | null
Follow-up project metadata.
null
formatted_revenue
string
Formatted revenue display value.
$ 0
revenue_amount
number
Numeric revenue amount.
0
pipeline_id
string | null
Linked pipeline id.
7892xxxxxxxxxxxx
current_milestone_id
string | null
Current milestone id.
7892xxxxxxxxxxxx
position
integer
Project position/order.
1
visible_to_all
boolean
Whether visible to all org members.
true
status_position
integer
Status position/order.
0
formatted_deal_value
string
Formatted deal value display value.
$ 0
custom_fields
list | object
Custom field values.
{ "tier": "gold" }
ProjectListResponse
count
integer
Total number of matching records.
62
next
string (uri) | null
URL for the next page, or null when exhausted.
https://api.projetly.io/api/project/info/?offset=10
previous
string (uri) | null
URL for the previous page, or null when unavailable.
null
max_page_limit
integer
Maximum page limit returned by the API.
0
ProjectInfo
Single project/milestone payload. The Make handler returns the open payload from the upstream project-milestones API unless options or milestone(s) mode is selected.
project_id
string
Project id.
7892xxxxxxxxxxxx
project_name
string
Project name.
Sample Project
template_id
string
Template the project was created from.
7892xxxxxxxxxxxx
total_tasks
integer
Total number of tasks in the project info payload.
40
completed_tasks
integer
Number of completed tasks.
0
inprogress_tasks
integer
Number of in-progress tasks.
1
open_tasks
integer
Number of open tasks.
39
on_hold_tasks
integer
Number of on-hold tasks.
0
options
object
Optional project options object returned by the upstream API.
custom_fields
list | object
Custom field values.
{ "tier": "gold" }
status_map
object
Mapping from normalized status groups to status keys.
{ "not_started": ["todo", "not_started"] }
activities
list
Project activity records.
[]
next_cursor_id
string | null
Cursor id for the next page of nested data.
eyJjdXxxxxx...
has_next_page
boolean
Whether another page of nested data is available.
false
Milestone
milestone_id
string
Milestone id.
7892xxxxxxxxxxxx
name
string
Milestone name.
Kickoff
flag
integer
Milestone flag value.
0
color
string
Milestone color.
#ADD8E6
intelligence_category
string
Intelligence category for the milestone.
risk, on_track
insight
object
Milestone insight metadata.
{ "key": "on_time", "name": "On Time" }
start_date
string (date)
Milestone start date.
2026-03-18
end_date
string (date)
Milestone end date.
2026-03-18
is_project_due
boolean
Whether the project is due for this milestone.
false
total_tasks
integer
Number of tasks in the milestone.
2
completed_tasks
integer
Number of completed tasks in the milestone.
0
inprogress_tasks
integer
Number of in-progress tasks.
1
on_hold_tasks
integer
Number of on-hold tasks.
0
open_tasks
integer
Number of open tasks in the milestone.
2
milestone_start_date
string (date-time)
Milestone start datetime.
2026-03-18T00:00:00
milestone_due_date
string (date-time)
Milestone due datetime.
2026-03-18T00:00:00
ProjectMilestonesListResponse
Returned by GET /make/project/{project_id}?milestone=true or ?milestones=true.
ProjectOptionsResponse
Project-specific options returned by GET /make/project/{project_id}?options=true. The Make handler returns the options object from the upstream get_project_milestones payload.
DealOptionsResponse
Deal creation option sets returned by GET /make/deal/options.
default_pipeline
string
Default pipeline template id.
7892xxxxxxxxxxxx
DealTemplateOption
org_temp_id
string
Org-scoped template id.
7892xxxxxxxxxxxx
template_name
string
Template name.
Onboarding Template
DealStatusOption
id
integer
Status option id.
1
status_key
string
Machine key for the status.
in_progress, not_started
status_name
string
Human-readable status label.
In Progress, Not Started
color
string
Status color.
#50C878
icon
string
Status icon class.
fa-solid fa-circle-check
DealUserOption
user_id
string
User id.
7892xxxxxxxxxxxx
profile_id
string
User profile id.
7892xxxxxxxxxxxx
contact_id
string | null
Linked contact id when the option represents a contact/customer.
7892xxxxxxxxxxxx
name
string | null
Short name.
Sample
full_name
string
Full name.
Sample First Last
email
string | null
Email address.
sample@mail.com
phone_number
string | null
Phone number.
+1 1234567xxx
role
string | null
User or customer role.
admin, member
profile_image
string | null
Profile image URL.
https://sample.com
team_id
string
Customer team id.
7892xxxxxxxxxxxx
is_contact
boolean
Whether this option references a contact.
true
is_customer
boolean
Whether this option is a customer.
false
is_partner
boolean
Whether this option is a partner.
false
is_invite_sent
boolean
Whether an invitation was sent.
false
invite_sent_at
string (date-time) | null
When the invitation was sent.
2026-06-05T07:46:23.312Z
CreateProjectRequest
Required: project, account.
account_id
string
Existing account id, or empty string to create a new account. Reuse an id from GET /make/project or a prior POST /make/project response (account_id).
7892xxxxxxxxxxxx
project
object
Project details (see below).
see project object
account
object
Account / company details (see below).
see account object
project object
project_name
string
Project name.
Sample Project
start_date
string
Start date.
2026-03-17T18:30:00Z
due_date
string
Due date.
2026-06-24T18:30:00Z
project_type
string
Type of project.
onboarding, service_delivery, sales_deal_room
project_fee
number
One-time project fee.
0
revenue
number
Revenue amount.
25000
show_forecasted_date
boolean
Whether a forecasted date is shown.
false
is_arr
boolean
Whether revenue is recurring (ARR).
false
project_template
object
Template to base the project on. Use a template id from GET /make/templates.
{ "template_id": "7892xxxx" }
billing_model
string
Billing model for the project/deal.
fixed_cost
billing_frequency
string
Billing frequency.
hourly
hourly_rate
number | string
Hourly billing rate.
150
monthly_rate
number | string
Monthly billing rate.
25000
expected_onboarding_fee
number | string
Expected onboarding fee.
5000
expected_deal_value
number
Expected deal value.
25000
project_duration
number | string
Project duration value.
6
duration_type
string
Unit for project_duration.
months
customer_project_owner
Customer-side project owner. Use a contact id from GET /make/contact (list).
see CustomerRef
pipeline_id
string
Pipeline id for deal-room projects.
7892xxxxxxxxxxxx
deal_resources
object | null
Deal resource metadata.
null
contract_duration
string | null
Contract duration.
12 months
target_milestone_id
string
Target milestone or pipeline id.
7892xxxxxxxxxxxx
invite_type
string
When/whether to invite the customer.
invite_later, invite_now
project_template object
template_id
string
Template id.
7892xxxxxxxxxxxx
org_temp_id
string
Org-scoped template id.
7892xxxxxxxxxxxx
template_name
string
Template name.
Onboarding Template
template_desc
string
Template description.
Template description
options
object
Template option sets.
{ "status": [] }
sub_template_type
integer
Template subtype.
4
is_from_scratch
boolean
Whether the template starts from scratch.
false
save_as_org_template
boolean
Whether to save the submitted template as an org template.
false
account object
company_id
string
Existing company id to link, or empty to create. Get from GET /make/company (list).
7892xxxxxxxxxxxx
company_logo_url
string
Company logo URL.
https://sample.com
account_name
string
Account / company name.
Sample Company
description
string
Account description.
Sample description
region
string
Region.
North America, EMEA
vertical
string
Industry vertical.
Education, SaaS
segment
string
Customer segment.
mid_market, enterprise
website_url
string
Company website.
https://sample.com
logo
list
Logo upload/list payload.
[]
invite_type
string
When/whether to invite the customer.
invite_later, invite_now
CreateProjectResponse
status
string
Outcome status.
success
project_id
string
Id of the created project.
7892xxxxxxxxxxxx
account_id
string
Id of the created / linked account.
7892xxxxxxxxxxxx
name
string
Created project name.
Sample Project
message
string
Human-readable result message.
Project created
ProjectMember
user_id
string | null
User id.
7892xxxxxxxxxxxx
profile_id
string | null
User profile id.
7892xxxxxxxxxxxx
full_name
string | null
Full name.
Sample First Last
profile_image
string | null
Profile image URL.
https://sample.com
email
string | null
Email address.
sample@mail.com
role
string | null
Role on the project.
owner, member
phone_number
string | null
Phone number.
+1 1234567xxx
is_customer
boolean
Whether the member is a customer.
false
is_partner
boolean
Whether the member is a partner.
false
is_owner
boolean
Whether the member is the project owner.
true
joining_date
string (date-time) | string | null
When the member joined.
2026-06-05T07:46:23.312Z
added_date
string (date-time) | string | null
When the member was added.
2026-06-05T07:46:23.312Z
CustomerRef
contact_id
string | null
Linked contact id.
7892xxxxxxxxxxxx
user_id
string | null
Linked user id.
7892xxxxxxxxxxxx
profile_id
string | null
Linked user profile id.
7892xxxxxxxxxxxx
name
string | null
Short name.
Sample
full_name
string | null
Full name.
Sample First Last
email
string | null
Email address.
sample@mail.com
phone_number
string | null
Phone number.
+1 1234567xxx
role
string | null
Role on the project.
owner, member
profile_image
string | null
Profile image URL.
https://sample.com
team_id
string
Customer team id.
7892xxxxxxxxxxxx
is_contact
boolean
Whether this references an existing contact.
true
is_customer
boolean
Whether this reference is a customer.
true
is_invite_sent
boolean
Whether an invitation was sent.
false
invite_sent_at
string (date-time) | null
When the invitation was sent.
2026-06-05T07:46:23.312Z
Task
item_id
string
Task id.
7892xxxxxxxxxxxx
display_id
string
Human-readable display id.
TASK_0042
title
string
Task title.
Sample Task
description
string | null
Task description.
Sample description
due_date
string
Due date / datetime.
2026-05-29
tags
list
List of objects { tag_id, tag_name } — task tags.
[{ "tag_id": "7892xxxx", "tag_name": "urgent" }]
checklist_items
list
List of objects { item, is_checked } — checklist entries.
[{ "item": "Send brief", "is_checked": false }]
is_completed
boolean
Whether the task is completed.
false
is_private
boolean
Whether the task is private.
false
is_starred
boolean
Whether the task is starred.
false
is_predefined
boolean
Whether the task came from a template.
false
is_blocked
boolean
Whether the task is blocked.
false
project_id
string
Parent project id.
7892xxxxxxxxxxxx
project_name
string
Parent project name.
Sample Project
milestone_id
string
Parent milestone id.
7892xxxxxxxxxxxx
milestone
object { name, milestone_id }
Parent milestone reference.
{ "name": "Kickoff", "milestone_id": "7892xxxx" }
users
list
List of objects { user_id, full_name, email, role, added_date } — assigned users.
[{ "user_id": "7892xxxx", "full_name": "Sample First Last", "email": "sample@mail.com", "role": "member", "added_date": "2026-05-29" }]
creation_time
string (date-time)
When the task was created.
2026-06-05T07:46:23.312Z
last_update_time
string (date-time)
When the task was last updated.
2026-06-05T07:46:23.312Z
TaskListResponse
Returned by GET /make/tasks.
CreateTaskRequest
Required: title, project_id.
title
string
yes
Task title.
Sample Task
project_id
string
yes
Project to create the task in. Get from GET /make/project (list) or the POST /make/project response.
7892xxxxxxxxxxxx
description
string
no
Task description.
Sample description
milestone_id
string
no
Milestone to place the task under. Get from GET /make/project/{project_id}?milestone=true (results[].milestone_id).
7892xxxxxxxxxxxx
due_date
string
no
Due date (YYYY-MM-DD).
2026-05-29
item_type
integer
no
Numeric item type.
1
item_type_key
string
no
Item type key.
task
users
list
no
List of ProjectMember objects — assignees. Use user ids from GET /make/users.
see ProjectMember
checklist_items
list
no
List of objects { item, is_checked } — checklist entries.
[{ "item": "Send brief", "is_checked": false }]
tags
list
no
List of objects { tag_name, is_new } — tags to attach.
[{ "tag_name": "urgent", "is_new": true }]
User
id
string
Internal user id (mirrors user_id).
7892xxxxxxxxxxxx
user_id
string
User id.
7892xxxxxxxxxxxx
full_name
string
User's full name.
Sample First Last
email
string
User's email.
sample@mail.com
role
string
User's role.
admin, member
phone_number
string
User's phone number.
+1 1234567xxx
is_customer
boolean
Whether the user is a customer.
false
is_partner
boolean
Whether the user is a partner.
false
Template
TemplateListResponse
OptionsResponse
Single-element array carrying metadata option sets. The exact keys depend on the resource (e.g. company_types, company_revenues, contact_person_categories, contact_buying_roles). Shape: [ { … } ].
FieldConfigResponse
Resource field-configuration metadata.
status
string
Outcome status.
success
last_updated_by
string
User id that last updated the field config.
7483762708060311553
last_update_time
string (date-time)
When the field config was last updated.
2026-07-20T08:17:27.519000
FieldDefinition
id
string
Field definition id.
cf_7484884165670735873
type
string
Field input type.
text
label
string
Human-readable field label.
Degree
placeholder
string | null
Placeholder text.
Enter value
value
any | null
Default or current field value.
null
isEditing
boolean
Whether the field is currently in editing state.
false
isValid
boolean
Whether the field definition is valid.
true
icon
string
Icon class for the field type.
fa-light fa-font-case
FieldViewConfig
key
string
Field key or custom field id.
lead_status
visible
boolean
Whether the field is visible.
true
order
integer
Display order.
0
FieldConfigUpdateRequest
field_definitions
list | string
yes
New field definitions to add. String values are parsed as JSON when possible.
[{ "name": "tier", "type": "text" }]
WebhookSubscribeRequest
Required: target_url, events, app_name.
target_url
string (uri)
yes
URL events are delivered to.
https://sample.com/hooks/abc
events
string
yes
List literal of event names.
"['task_created', 'task_updated']"
app_name
string
yes
Source app name.
make
project_id
string
no
Required for task events; scopes delivery to one project. Get from GET /make/project (list) or the POST /make/project response.
7892xxxxxxxxxxxx
Webhook event names
company_created, company_updated, contact_created, contact_updated, deal_created, deal_updated, project_created, project_updated, task_created, task_updated (task events additionally accept task_assigned, task_status_changed, task_completed).
Last updated