Delighted People API
Manage people records for survey targeting
Manage people records for survey targeting
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/delighted-people-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Delighted Autopilot People API
description: REST API for the Delighted customer satisfaction platform. Enables sending surveys, retrieving and adding survey responses, accessing NPS and CSAT metrics, managing Autopilot drip campaigns, handling webhooks for real-time events, and managing people records including unsubscribes and bounces. Authentication is via HTTP Basic Auth using per-project API keys.
version: v1
contact:
name: Delighted Support
url: https://app.delighted.com/docs/api
termsOfService: https://delighted.com/terms
license:
name: Proprietary
url: https://delighted.com/terms
servers:
- url: https://api.delighted.com/v1
description: Delighted API v1
security:
- basicAuth: []
tags:
- name: People
description: Manage people records for survey targeting
paths:
/people.json:
post:
operationId: sendToPersonOrCreatePerson
summary: Send survey to person
description: Creates or updates a person record and optionally schedules a survey to be sent to them. If the person already exists (matched by email or phone), their record is updated with any new properties.
tags:
- People
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SendToPersonRequest'
responses:
'200':
description: Person created or updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/PersonSurveyResponse'
'401':
description: Unauthorized - invalid or missing API key
'429':
description: Rate limit exceeded
headers:
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying
get:
operationId: listPeople
summary: List people
description: Returns a paginated list of people in the project.
tags:
- People
parameters:
- name: per_page
in: query
description: Number of results per page. Default is 20, maximum is 100.
schema:
type: integer
default: 20
maximum: 100
- name: since
in: query
description: Unix timestamp to limit results to people created on or after this time.
schema:
type: integer
- name: until
in: query
description: Unix timestamp to limit results to people created on or before this time.
schema:
type: integer
- name: email
in: query
description: Restricts results to a specific person by email address.
schema:
type: string
format: email
- name: phone_number
in: query
description: Phone number in E.164 format (e.g. +17132746524).
schema:
type: string
responses:
'200':
description: List of people
headers:
Link:
schema:
type: string
description: Cursor-based pagination link for next page
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Person'
'401':
description: Unauthorized
'429':
description: Rate limit exceeded
/people/{person_identifier}:
delete:
operationId: deletePerson
summary: Delete person
description: Deletes the specified person and all information related to them, including surveys, responses, properties, Autopilot membership, survey history, integration links, unsubscribe/bounce status, and testimonials.
tags:
- People
parameters:
- name: person_identifier
in: path
required: true
description: Person identifier. Can be the person ID (e.g. 24248363), email prefixed with 'email:' (e.g. email:jony@appleseed.com), or phone number prefixed with 'phone_number:' (e.g. phone_number:+17132746524).
schema:
type: string
responses:
'202':
description: Person deletion accepted
content:
application/json:
schema:
$ref: '#/components/schemas/OkResponse'
'401':
description: Unauthorized
'404':
description: Person not found
'429':
description: Rate limit exceeded
/people/{person_email}/survey_requests/pending.json:
delete:
operationId: deletePendingSurveyRequests
summary: Delete pending survey requests
description: Removes all scheduled (not yet sent) survey requests for the specified person.
tags:
- People
parameters:
- name: person_email
in: path
required: true
description: Email of the person whose pending surveys should be deleted.
schema:
type: string
format: email
responses:
'200':
description: Pending surveys deleted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/OkResponse'
'401':
description: Unauthorized
'404':
description: Person not found
'429':
description: Rate limit exceeded
components:
schemas:
PersonSurveyResponse:
type: object
description: Response after sending survey to or creating a person.
properties:
id:
type: string
description: Unique person identifier.
email:
type: string
format: email
description: Person's email address.
name:
type:
- string
- 'null'
description: Person's name.
survey_scheduled_at:
type: integer
description: Unix timestamp when the survey is scheduled to be sent.
properties:
type: object
additionalProperties:
type: string
description: Custom properties associated with the person.
Person:
type: object
description: A person record in the Delighted project.
properties:
id:
type: string
description: Unique person identifier.
email:
type: string
format: email
description: Person's email address.
name:
type:
- string
- 'null'
description: Person's name.
created_at:
type: integer
description: Unix timestamp when the person was created.
phone_number:
type:
- string
- 'null'
description: Person's phone number in E.164 format.
last_sent_at:
type:
- integer
- 'null'
description: Unix timestamp when the last survey was sent.
last_responded_at:
type:
- integer
- 'null'
description: Unix timestamp when the person last responded to a survey.
next_survey_scheduled_at:
type:
- integer
- 'null'
description: Unix timestamp when the next survey is scheduled to be sent.
OkResponse:
type: object
description: Simple success response.
properties:
ok:
type: boolean
description: Indicates the operation was successful.
example: true
SendToPersonRequest:
type: object
description: Request body for sending a survey to a person.
properties:
email:
type: string
format: email
description: Email of the person. Required if phone_number is not provided or channel is email.
phone_number:
type: string
description: Contact number in E.164 format. Required if channel is sms.
channel:
type: string
enum:
- email
- sms
description: Survey delivery method. Defaults to email.
name:
type: string
description: Person's name.
delay:
type: integer
description: Seconds to wait before sending the survey. Default is 0.
properties:
type: object
additionalProperties:
type: string
description: 'Custom metadata fields for segmentation and integration. Supports special keys: question_product_name, delighted_email_subject, delighted_intro_message, locale, thank_you_message, thank_you_link_text, thank_you_link_url.'
send:
type: boolean
description: Set false to create person without sending a survey. Default is true.
default: true
last_sent_at:
type: integer
description: Unix timestamp for survey throttling consideration. Used when syncing historical send data.
email_update:
type: string
format: email
description: New email address when updating an existing contact.
phone_number_update:
type: string
description: New phone number when updating an existing contact.
securitySchemes:
basicAuth:
type: http
scheme: basic
description: Use your Delighted API key as the username. Leave the password empty. The API key is found in your project settings.