Oneprofile Suppression API
The workspace do-not-contact list, enforced before every send.
The workspace do-not-contact list, enforced before every send.
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/getoneprofile-ai:getoneprofile-ai-suppression-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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:
contact:
email: support@getoneprofile.ai
name: Oneprofile Support
description: REST API reference for Oneprofile, the GTM data layer for your CRM. Manage tables, enrichments, and integrations. Authenticate with an API key to get started.
termsOfService: https://www.getoneprofile.ai/terms
title: Reference | Oneprofile Suppression API
version: 1.0.42765316646
tags:
- description: The workspace do-not-contact list, enforced before every send.
name: suppression
paths:
/do-not-contact/:
delete:
description: Removal is deliberate and manual-only; no automated path unsuppresses. A contact an entry a person added stopped before any step reached them goes on from step one, as a new contact would; one already reached stays as it is, and so does everyone an unsubscribe, a bounce or an inbox Do not contact put on the list. Ids that are no longer on the list are skipped, and `count` says how many went.
operationId: delete_do_not_contact
parameters:
- description: IDs of the entries to delete
in: query
name: ids
required: true
schema:
description: IDs of the entries to delete
items:
format: uuid
type: string
maxItems: 100
minItems: 1
title: Ids
type: array
- description: Report what would be deleted, and delete nothing.
in: query
name: dry_run
required: false
schema:
default: false
description: Report what would be deleted, and delete nothing.
title: Dry Run
type: boolean
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SuccessfullyDeletedResponse'
description: Successful Response
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedResponse'
description: Unauthorized
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenResponse'
description: Forbidden
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableEntityResponse'
description: Invalid request made to the API.
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Internal server error.
'502':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Bad gateway error.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Service unavailable.
security:
- APIKeyHeader: []
- HTTPBearer: []
summary: Delete do-not-contact entries
tags:
- suppression
get:
description: 'Newest first unless `order_by` says otherwise: `created_at` orders by when each entry was added, `value` by the address or domain. Ties go by id. Each entry says which sequence the address was most recently on when it was marked, and which teammate marked it. `GET /do-not-contact/length/` counts the same filters.'
operationId: list_do_not_contact
parameters:
- in: query
name: filters
required: true
schema:
$ref: '#/components/schemas/ListDoNotContactFilterParamsSchema'
- description: The number of items to return.
in: query
name: limit
required: false
schema:
default: 10
description: The number of items to return.
maximum: 100
minimum: 1
title: Limit
type: integer
- in: query
name: order_by
required: false
schema:
$ref: '#/components/schemas/OrderingParametersForIdCreatedAtValue'
default: created_at
enum:
- id
- created_at
- value
type: string
- in: query
name: order_direction
required: false
schema:
default: desc
enum:
- asc
- desc
title: Order Direction
type: string
- description: Set the cursor to the next or previous page. You can get the cursor from the previous page's response.
in: query
name: cursor
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Set the cursor to the next or previous page. You can get the cursor from the previous page's response.
title: Cursor for pagination.
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_SuppressionListEntryReadSchema_'
description: Successful Response
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedResponse'
description: Unauthorized
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenResponse'
description: Forbidden
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableEntityResponse'
description: Invalid request made to the API.
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Internal server error.
'502':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Bad gateway error.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Service unavailable.
security:
- APIKeyHeader: []
- HTTPBearer: []
summary: List do-not-contact entries
tags:
- suppression
/do-not-contact/bulk/:
post:
description: Paste or upload addresses and domains in bulk; duplicates are ignored. Answers the entries that were new, and the inputs that could not be read as an address or a domain. A reply the AI wrote for anyone they reach leaves Needs approval, never to be sent. With `stop_live_sequences`, everyone the values reach is also stopped in every live sequence, reading Do not contact, as the inbox's Do not contact stops them; without it, the send check stops them one step at a time.
operationId: add_do_not_contact
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SuppressionAddSchema'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/SuppressionBulkCreateResponseSchema'
description: Successful Response
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedResponse'
description: Unauthorized
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenResponse'
description: Forbidden
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableEntityResponse'
description: Invalid request made to the API.
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Internal server error.
'502':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Bad gateway error.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Service unavailable.
security:
- APIKeyHeader: []
- HTTPBearer: []
summary: Add do-not-contact entries
tags:
- suppression
/do-not-contact/bulk/preview/:
post:
description: Takes the add's own body, reads the values and adds nothing. Answers the whole domains among them that are personal email providers or this workspace's own, which the add box asks about first, and with `stop_live_sequences` how many live places in sequences the add would stop, and in which sequences.
operationId: preview_add_do_not_contact
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SuppressionAddSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SuppressionAddPreviewSchema'
description: Successful Response
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedResponse'
description: Unauthorized
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenResponse'
description: Forbidden
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableEntityResponse'
description: Invalid request made to the API.
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Internal server error.
'502':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Bad gateway error.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Service unavailable.
security:
- APIKeyHeader: []
- HTTPBearer: []
summary: Preview adding do-not-contact entries
tags:
- suppression
/do-not-contact/export/:
get:
description: Plain text, one value per line, importable anywhere.
operationId: export_do_not_contact
responses:
'200':
content:
application/json:
schema: {}
description: Plain text file, one value per line.
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedResponse'
description: Unauthorized
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenResponse'
description: Forbidden
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableEntityResponse'
description: Invalid request made to the API.
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Internal server error.
'502':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Bad gateway error.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Service unavailable.
security:
- APIKeyHeader: []
- HTTPBearer: []
summary: Export the do-not-contact list
tags:
- suppression
/do-not-contact/length/:
get:
description: How many entries the list's filters select.
operationId: count_do_not_contact
parameters:
- description: Filter by value (case-insensitive contains)
in: query
name: search
required: false
schema:
anyOf:
- maxLength: 320
type: string
- type: 'null'
description: Filter by value (case-insensitive contains)
title: Search
- description: Only addresses, or only whole domains
in: query
name: kind
required: false
schema:
anyOf:
- $ref: '#/components/schemas/SuppressionKind'
- type: 'null'
description: Only addresses, or only whole domains
title: Kind
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SuppressionCountSchema'
description: Successful Response
'401':
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedResponse'
description: Unauthorized
'403':
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenResponse'
description: Forbidden
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/UnprocessableEntityResponse'
description: Invalid request made to the API.
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Internal server error.
'502':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Bad gateway error.
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/ServerErrorResponse'
description: Service unavailable.
security:
- APIKeyHeader: []
- HTTPBearer: []
summary: Count do-not-contact entries
tags:
- suppression
components:
schemas:
ListDoNotContactFilterParamsSchema:
description: Query parameters for filtering the do-not-contact list.
properties:
kind:
anyOf:
- $ref: '#/components/schemas/SuppressionKind'
- type: 'null'
description: Only addresses, or only whole domains
search:
anyOf:
- maxLength: 320
type: string
- type: 'null'
description: Filter by value (case-insensitive contains)
title: Search
title: ListDoNotContactFilterParamsSchema
type: object
SuppressionEntryReadSchema:
properties:
created_at:
format: date-time
title: Created At
type: string
id:
format: uuid
title: Id
type: string
kind:
$ref: '#/components/schemas/SuppressionKind'
marked_by:
anyOf:
- type: string
- type: 'null'
description: User id of the teammate who first marked this entry. Null when a contact or a bounce put it there, when an API key added it, or when it is from before teammates were kept.
title: Marked By
source:
$ref: '#/components/schemas/SuppressionSource'
value:
title: Value
type: string
required:
- id
- kind
- value
- source
- created_at
title: SuppressionEntryReadSchema
type: object
ForbiddenResponse:
properties:
detail:
description: The detail of why the request is forbidden.
title: Detail
type: string
required:
- detail
title: ForbiddenResponse
type: object
SuppressionListEntryReadSchema:
properties:
created_at:
format: date-time
title: Created At
type: string
id:
format: uuid
title: Id
type: string
kind:
$ref: '#/components/schemas/SuppressionKind'
last_sequence:
anyOf:
- $ref: '#/components/schemas/LastSequenceReadSchema'
- type: 'null'
description: The sequence this address was most recently on when it was marked. Null for a whole domain, and for an address that was never on a sequence.
marked_by:
anyOf:
- type: string
- type: 'null'
description: User id of the teammate who first marked this entry. Null when a contact or a bounce put it there, when an API key added it, or when it is from before teammates were kept.
title: Marked By
source:
$ref: '#/components/schemas/SuppressionSource'
value:
title: Value
type: string
required:
- id
- kind
- value
- source
- created_at
- last_sequence
title: SuppressionListEntryReadSchema
type: object
UnprocessableEntityIssue:
properties:
input:
anyOf:
- type: string
- type: integer
- type: number
- type: boolean
- items: {}
type: array
- additionalProperties: true
type: object
description: The user's input that caused the error.
title: Input
loc:
description: The location of the error. Always contains 1 or 2 elements. The first element is the type of location (e.g. 'body', 'query', 'path', 'header'). The second element is the name of the field that caused the error. If the error is not related to a specific field, the second element is not present.
items:
type: string
title: Loc
type: array
msg:
description: The message of the error. The error message to show to the user.
title: Msg
type: string
type:
description: The type of the error. Useful for frontend code to handle different types of errors.
title: Type
type: string
required:
- loc
- msg
- type
- input
title: UnprocessableEntityIssue
type: object
SuppressionAddPreviewSchema:
properties:
own_domains:
description: Whole domains among the values that this workspace itself mails from.
items:
type: string
title: Own Domains
type: array
personal_email_providers:
description: Whole domains among the values that are personal email providers.
items:
type: string
title: Personal Email Providers
type: array
sequence_names:
description: The sequences holding them, by name; empty without `stop_live_sequences`.
items:
type: string
title: Sequence Names
type: array
stopped:
description: How many live places in sequences the add would stop; 0 without `stop_live_sequences`.
title: Stopped
type: integer
required:
- personal_email_providers
- own_domains
- stopped
- sequence_names
title: SuppressionAddPreviewSchema
type: object
ServerErrorResponse:
properties:
detail:
description: The detail of why the server returned an error.
title: Detail
type: string
required:
- detail
title: ServerErrorResponse
type: object
PaginatedResponse_SuppressionListEntryReadSchema_:
properties:
data:
description: The list of ResponseItems.
items:
$ref: '#/components/schemas/SuppressionListEntryReadSchema'
title: Data
type: array
next_page_cursor:
anyOf:
- type: string
- type: 'null'
description: The cursor to the next page. If there are no more pages, this is None.
previous_page_cursor:
anyOf:
- type: string
- type: 'null'
description: The cursor to the previous page. If there are no previous pages, this is None.
title: PaginatedResponse[SuppressionListEntryReadSchema]
type: object
SuppressionCountSchema:
properties:
count:
title: Count
type: integer
required:
- count
title: SuppressionCountSchema
type: object
OrderingParametersForIdCreatedAtValue:
enum:
- id
- created_at
- value
title: OrderingParametersForIdCreatedAtValue
type: string
SuppressionSource:
description: How an entry got onto the list, kept for audit and for the UI's story.
enum:
- manual
- assistant
- opt_out_reply
- reply_stop
- inbox_action
- opt_out_link
- hard_bounce
title: SuppressionSource
type: string
SuppressionKind:
description: Whether an entry blocks one address or a whole domain.
enum:
- email
- domain
title: SuppressionKind
type: string
SuppressionAddSchema:
properties:
stop_live_sequences:
default: false
description: Also stop everyone the values reach in every live sequence, reading Do not contact. Off, they stay where they are and the send check stops them one step at a time.
title: Stop Live Sequences
type: boolean
values:
description: Addresses and domains, one per item. A value containing @ suppresses one address; a bare domain suppresses everyone at it.
items:
maxLength: 320
minLength: 1
type: string
maxItems: 10000
minItems: 1
title: Values
type: array
required:
- values
title: SuppressionAddSchema
type: object
LastSequenceReadSchema:
properties:
name:
title: Name
type: string
sequence_id:
anyOf:
- format: uuid
type: string
- type: 'null'
description: The sequence to open; null once it has been deleted, its name still kept.
title: Sequence Id
required:
- name
- sequence_id
title: LastSequenceReadSchema
type: object
UnprocessableEntityResponse:
properties:
detail:
description: The detail of the error. This is the error message to show to the user. You should also use the issues field to show more detailed error messages per field. Use this field for a single liner error message.
title: Detail
type: string
issues:
description: The issues that caused the error. There can be multiple issues. Each issue is a user-facing error message.
items:
$ref: '#/components/schemas/UnprocessableEntityIssue'
title: Issues
type: array
required:
- detail
- issues
title: UnprocessableEntityResponse
type: object
UnauthorizedResponse:
properties:
detail:
description: The detail of why the request is unauthorized.
title: Detail
type: string
required:
- detail
title: UnauthorizedResponse
type: object
SuppressionBulkCreateResponseSchema:
properties:
data:
description: The entries that were new, in the order given.
items:
$ref: '#/components/schemas/SuppressionEntryReadSchema'
title: Data
type: array
rejected:
description: Inputs that could not be parsed.
items:
type: string
title: Rejected
type: array
sequence_names:
description: The sequences that held them, by name; empty without `stop_live_sequences`.
items:
type: string
title: Sequence Names
type: array
stopped:
default: 0
description: How many live places in sequences the add stopped; 0 without `stop_live_sequences`.
title: Stopped
type: integer
required:
- data
- rejected
title: SuppressionBulkCreateResponseSchema
type: object
SuccessfullyDeletedResponse:
properties:
count:
default: 1
description: The number of resources that were deleted.
title: Count
type: integer
detail:
description: The detail of why the resource was deleted.
title: Detail
type: string
required:
- detail
title: SuccessfullyDeletedResponse
type: object
securitySchemes:
APIKeyHeader:
in: header
name: X-API-Key
type: apiKey
HTTPBearer:
scheme: bearer
type: http