# Outseta API > REST API reference for Outseta — the all-in-one platform for SaaS founders. - [Introduction](https://docs.outseta.com/index.md): REST API reference for Outseta — auth, billing, user accounts, email, and support, all in one platform. - [Authentication](https://docs.outseta.com/essentials/authentication.md): How to authenticate requests to the Outseta API. - [MCP server](https://docs.outseta.com/mcp-server.md): Connect your AI agent to Outseta with the remote MCP server — manage your account and analyze your business data directly. - [Agent skills](https://docs.outseta.com/agent-skills.md): Wire Outseta into your app with the Outseta agent toolkit — integration as simple as writing a prompt. - [Log a user in.](https://docs.outseta.com/api-reference/public/log-a-user-in.md): Authenticates a user and returns a JWT access token (plus a refresh token). - [Exchange a magic-link token for an access token (passwordless login).](https://docs.outseta.com/api-reference/public/exchange-a-magic-link-token-for-an-access-token-passwordless-login.md): Call this with the magicToken carried by the link from a "magic link" email (requested via POST /api/v1/crm/people/requestMagicLink): - [Complete login when user has two-factor authentication enabled.](https://docs.outseta.com/api-reference/public/complete-login-when-user-has-two-factor-authentication-enabled.md): Call this after `POST /api/v1/tokens` returns `two_factor_required`. Post the challenge token from that response together with the user's one-time code (the emailed code, or the current code from their authenticator app): - [Re-send the one-time code for an in-progress email two-factor challenge.](https://docs.outseta.com/api-reference/public/re-send-the-one-time-code-for-an-in-progress-email-two-factor-challenge.md): Post the challenge token from the original `POST /api/v1/tokens` response: - [Complete login with a two-factor recovery code.](https://docs.outseta.com/api-reference/public/complete-login-with-a-two-factor-recovery-code.md): A fallback for users who cannot produce their primary code but still have a recovery code on file (see `recovery_codes_available` on the login response). Post the challenge token together with one recovery code: - [Switch an in-progress login challenge to a different enrolled mechanism.](https://docs.outseta.com/api-reference/public/switch-an-in-progress-login-challenge-to-a-different-enrolled-mechanism.md): When a user has more than one method enrolled (see `available_mechanisms` on the login response) they can switch the active challenge — for example from `Totp` to `Email` when they have lost access to their authenticator. Post the current challenge token and the desired mechanism: - [Begin email enrollment during a forced-2FA login.](https://docs.outseta.com/api-reference/public/begin-email-enrollment-during-a-forced-2fa-login.md): Call this when `POST /api/v1/tokens` returned `two_factor_enrollment_required` and the user chooses email. Post the enrollment token from that response: - [Confirm email enrollment and complete a forced-2FA login.](https://docs.outseta.com/api-reference/public/confirm-email-enrollment-and-complete-a-forced-2fa-login.md): Post the enrollment token (from `POST /api/v1/tokens`), the challenge token (from `.../enroll/email/begin`), and the emailed code: - [Post apiv1tokenstwo factorenrolltotpbegin](https://docs.outseta.com/api-reference/public/post-apiv1tokenstwo-factorenrolltotpbegin.md) - [Confirm authenticator-app (TOTP) enrollment and complete a forced-2FA login.](https://docs.outseta.com/api-reference/public/confirm-authenticator-app-totp-enrollment-and-complete-a-forced-2fa-login.md): Post the enrollment token (from `POST /api/v1/tokens`), the challenge token (from `.../enroll/totp/begin`), and the current code from the user's authenticator app: - [Retrieve the associations between plans and add-ons.](https://docs.outseta.com/api-reference/billing/retrieve-the-associations-between-plans-and-add-ons.md): Standard filtering applies, so the associations of a single plan are retrieved with ?Plan.Uid={planUid} and those of a single add-on with ?AddOn.Uid={addOnUid}. A PlanAddOns collection nested inside a plan or an add-on holds at most 100 entries, so a plan with more add-ons than that is read in full… - [Retrieve all plans.](https://docs.outseta.com/api-reference/billing/retrieve-all-plans.md) - [Retrieve a plan.](https://docs.outseta.com/api-reference/billing/retrieve-a-plan.md) - [Add a new plan.](https://docs.outseta.com/api-reference/billing/add-a-new-plan.md) - [Update a plan.](https://docs.outseta.com/api-reference/billing/update-a-plan.md) - [Delete a plan.](https://docs.outseta.com/api-reference/billing/delete-a-plan.md) - [Retrieve all plan families.](https://docs.outseta.com/api-reference/billing/retrieve-all-plan-families.md) - [Retrieve a plan family.](https://docs.outseta.com/api-reference/billing/retrieve-a-plan-family.md) - [Add a new plan family.](https://docs.outseta.com/api-reference/billing/add-a-new-plan-family.md) - [Update a plan family.](https://docs.outseta.com/api-reference/billing/update-a-plan-family.md) - [Delete a plan family.](https://docs.outseta.com/api-reference/billing/delete-a-plan-family.md) - [Retrieve all subscriptions.](https://docs.outseta.com/api-reference/billing/retrieve-all-subscriptions.md): Admins and API key callers see every subscription; non-admin users see only subscriptions on accounts they are related to. That scope is determined by the auth token and cannot be widened by the caller. Optionally pass Account.PersonAccount.Person.Uid as a query parameter to narrow the results to a… - [Retrieve a subscription.](https://docs.outseta.com/api-reference/billing/retrieve-a-subscription.md) - [Delete a subscription.](https://docs.outseta.com/api-reference/billing/delete-a-subscription.md): Only a future-dated subscription can be deleted; the current subscription on an account cannot be removed this way. - [Change a subscription on an account.](https://docs.outseta.com/api-reference/billing/change-a-subscription-on-an-account.md): Returns an invoice object with information about the amount outstanding. - [Preview the invoice for a subscription change.](https://docs.outseta.com/api-reference/billing/preview-the-invoice-for-a-subscription-change.md): Returns an invoice object with information about the amount outstanding. This method does not commit the subscription change. - [Indicate that an upgrade of plan is required.](https://docs.outseta.com/api-reference/billing/indicate-that-an-upgrade-of-plan-is-required.md): When a subscription is flagged, next time the user authenticates the authentication widget will prompt the user to change plan. - [Add a subscription to an account for the first time.](https://docs.outseta.com/api-reference/billing/add-a-subscription-to-an-account-for-the-first-time.md): Returns an invoice object with information about the amount outstanding. - [Preview the initial or renewal invoice for a hypothetical subscription.](https://docs.outseta.com/api-reference/billing/preview-the-initial-or-renewal-invoice-for-a-hypothetical-subscription.md): Returns an invoice object with information about the amount outstanding if an account were to register with this subscription. BillingRenewalTerm values: 1 = Monthly, 2 = Yearly, 3 = Quarterly, 4 = OneTime. Pass asOf=renewal to see the renewal invoice instead of the initial invoice. - [Retrieve all subscription add-ons.](https://docs.outseta.com/api-reference/billing/retrieve-all-subscription-add-ons.md) - [Retrieve a subscription add-on.](https://docs.outseta.com/api-reference/billing/retrieve-a-subscription-add-on.md) - [Add an add-on to a subscription.](https://docs.outseta.com/api-reference/billing/add-an-add-on-to-a-subscription.md) - [Preview the invoice for adding an add-on to a subscription.](https://docs.outseta.com/api-reference/billing/preview-the-invoice-for-adding-an-add-on-to-a-subscription.md): Returns an invoice object with information about the amount outstanding. This method does not commit the change. - [End an add-on on a subscription.](https://docs.outseta.com/api-reference/billing/end-an-add-on-on-a-subscription.md): Removes the add-on from the subscription going forward and returns the updated subscription. - [Immediately ends an add-on.](https://docs.outseta.com/api-reference/billing/immediately-ends-an-add-on.md) - [Indicate that an upgrade of an add-on is required.](https://docs.outseta.com/api-reference/billing/indicate-that-an-upgrade-of-an-add-on-is-required.md): When a subscription add-on is flagged, the next time the user authenticates the authentication widget will prompt the user to change their add-on. - [Add a usage entry for an add-on that bills for usage at the end of the month.](https://docs.outseta.com/api-reference/billing/add-a-usage-entry-for-an-add-on-that-bills-for-usage-at-the-end-of-the-month.md) - [Retrieve all invoices.](https://docs.outseta.com/api-reference/billing/retrieve-all-invoices.md): Admins and API key callers see every invoice. Non-admin users see only invoices belonging to the account they are the primary contact of. Pass excludeInvoiceUid as a query parameter to omit a specific invoice from the result set. - [Create an ad-hoc invoice for a given account.](https://docs.outseta.com/api-reference/billing/create-an-ad-hoc-invoice-for-a-given-account.md) - [Retrieve an invoice.](https://docs.outseta.com/api-reference/billing/retrieve-an-invoice.md) - [Update an ad-hoc (manually created) invoice.](https://docs.outseta.com/api-reference/billing/update-an-ad-hoc-manually-created-invoice.md): Only invoices created manually via the API or admin UI can be updated; invoices generated by a subscription's billing cycle are immutable and will return a validation error. - [Delete an invoice.](https://docs.outseta.com/api-reference/billing/delete-an-invoice.md) - [Retrieve a rendered PDF copy of an invoice.](https://docs.outseta.com/api-reference/billing/retrieve-a-rendered-pdf-copy-of-an-invoice.md): Response body is a binary PDF (Content-Type: application/pdf) served as an attachment named invoice-{Number}-{InvoiceDate}-{AccountName}.pdf. - [Email an invoice to the account's billing contact.](https://docs.outseta.com/api-reference/billing/email-an-invoice-to-the-accounts-billing-contact.md): Optional query parameters: note - free-text note to include in the email body. bcc - comma-separated list of email addresses to BCC. - [Send the invoice paid receipt email to the account's billing contact.](https://docs.outseta.com/api-reference/billing/send-the-invoice-paid-receipt-email-to-the-accounts-billing-contact.md): Returns 400 Bad Request if the invoice is not in the Paid status. - [Update payment information for an account.](https://docs.outseta.com/api-reference/billing/update-payment-information-for-an-account.md) - [Retrieve all transactions.](https://docs.outseta.com/api-reference/billing/retrieve-all-transactions.md): Transactions for a given account, tied to accounts and invoices. BillingTransactionType: Invoice = 1, Payment = 2, Credit = 3, Refund = 4, Chargeback = 5. - [Add a payment to an invoice.](https://docs.outseta.com/api-reference/billing/add-a-payment-to-an-invoice.md): If the amount matches the outstanding amount of the invoice, the invoice will be marked as Paid. - [Retrieve all discount coupons.](https://docs.outseta.com/api-reference/billing/retrieve-all-discount-coupons.md) - [Add a new discount coupon.](https://docs.outseta.com/api-reference/billing/add-a-new-discount-coupon.md): Only one of AmountOff or PercentOff should be set. Duration values: 1 = Forever, 2 = Once, 3 = Repeating (DurationInMonths must be set). - [Retrieve a discount coupon.](https://docs.outseta.com/api-reference/billing/retrieve-a-discount-coupon.md) - [Update a discount coupon.](https://docs.outseta.com/api-reference/billing/update-a-discount-coupon.md) - [Delete a discount coupon.](https://docs.outseta.com/api-reference/billing/delete-a-discount-coupon.md) - [Retrieve the redemptions of a discount coupon.](https://docs.outseta.com/api-reference/billing/retrieve-the-redemptions-of-a-discount-coupon.md) - [Add a discount to a subscription.](https://docs.outseta.com/api-reference/billing/add-a-discount-to-a-subscription.md) - [Remove a discount from a subscription.](https://docs.outseta.com/api-reference/billing/remove-a-discount-from-a-subscription.md): Expires the active discount coupon on the subscription as of now. - [Retrieve a discount coupon by code.](https://docs.outseta.com/api-reference/billing/retrieve-a-discount-coupon-by-code.md): Used during registration to confirm that a coupon code can still be applied to a plan. Returns the coupon when valid, 404 when no coupon matches the code, or a validation error when the coupon cannot be applied. - [Register a new account.](https://docs.outseta.com/api-reference/crm/register-a-new-account.md): This is the same endpoint the sign up embed uses to create accounts. At a minimum you must pass one Primary Contact with an Email address and one Subscription record with a reference to a Plan. Other fields (e.g. Account Name, Billing Address, Payment Information, etc.) can be passed as desired. A c… - [Register with a paid plan](https://docs.outseta.com/api-reference/registration/register-with-plan.md): Create a new account on a specific plan and start a subscription during registration. - [Register with a free trial](https://docs.outseta.com/api-reference/registration/register-free-trial.md): Create a new account that begins on a free trial, with no payment required up front. - [Retrieve all accounts.](https://docs.outseta.com/api-reference/crm/retrieve-all-accounts.md): Optionally filtered by segment (segmentUid) or search query (q). - [Retrieve an account.](https://docs.outseta.com/api-reference/crm/retrieve-an-account.md) - [Add a new account.](https://docs.outseta.com/api-reference/crm/add-a-new-account.md): To add an account with an existing person, the Account payload include something like this: { ... other Account properties ..., "PersonAccount": [ { "Person": { "Uid": [personUid] }, "IsPrimary": "true" } ] } - [Update account information.](https://docs.outseta.com/api-reference/crm/update-account-information.md): You can update one or multiple properties on the object. Any property that you include in the json schema will be updated. To update custom properties just include them in the same way that they are included when you do a get on the object. - [Delete an account record.](https://docs.outseta.com/api-reference/crm/delete-an-account-record.md) - [Add a person to an existing account.](https://docs.outseta.com/api-reference/crm/add-a-person-to-an-existing-account.md): Add a person to an existing account. Set sendWelcomeEmail=true to send a welcome email to the person added. - [Remove a person from an account.](https://docs.outseta.com/api-reference/crm/remove-a-person-from-an-account.md): Note that you cannot remove the primary contact of an account. - [Update an account membership.](https://docs.outseta.com/api-reference/crm/update-an-account-membership.md): Update the membership that links a person to an account — for example, to make a different person the account's primary contact. The membershipUid identifies which membership to update; send the changed PersonAccount fields (such as IsPrimary) in the request body. - [Extend the date that a trial subscription expires.](https://docs.outseta.com/api-reference/crm/extend-the-date-that-a-trial-subscription-expires.md) - [Send a confirmation email to people on an account.](https://docs.outseta.com/api-reference/crm/send-a-confirmation-email-to-people-on-an-account.md): Pass personUid as a query parameter to send to a specific person, or personUid=* to send to all people on the account. If no personUid is provided, the email is sent to the primary contact. - [Add a cancellation request to an account.](https://docs.outseta.com/api-reference/crm/add-a-cancellation-request-to-an-account.md): The account needs to be in subscribing stage. The stage will automatically change over to cancelling. If the account has a subscription attached to it then at the subscription renewal the subscription will end and the account will be automatically set to expired. - [Remove a previous cancellation request from an account.](https://docs.outseta.com/api-reference/crm/remove-a-previous-cancellation-request-from-an-account.md) - [Retrieve all people.](https://docs.outseta.com/api-reference/crm/retrieve-all-people.md): Returns the people associated with your account. - [Retrieve a person.](https://docs.outseta.com/api-reference/crm/retrieve-a-person.md) - [Add a new person.](https://docs.outseta.com/api-reference/crm/add-a-new-person.md) - [Update a person record.](https://docs.outseta.com/api-reference/crm/update-a-person-record.md): You can update one or multiple properties on the object. Any property that you include in the json schema will be updated. To update custom properties just include them in the same way that they are included when you do a get on the object. - [Delete a person record.](https://docs.outseta.com/api-reference/crm/delete-a-person-record.md) - [Regenerate 2FA recovery codes for a user.](https://docs.outseta.com/api-reference/crm/regenerate-2fa-recovery-codes-for-a-user.md): Use this when a user is locked out of their authenticator. All prior recovery codes are invalidated. Existing TOTP/Email mechanisms are intentionally left in place — the admin returns the new codes to the user out of band, the user logs in with one, then re-enrolls their device. Mirrors the temporar… - [Set a temporary password for a user.](https://docs.outseta.com/api-reference/crm/set-a-temporary-password-for-a-user.md): The user needs to update the password with the next login. - [Initiate the forgot password flow.](https://docs.outseta.com/api-reference/crm/initiate-the-forgot-password-flow.md): Sends an email to the user with a link to a page where they can reset their password. The reset password token in the link is valid for 30 minutes. - [Request a passwordless magic link to sign in.](https://docs.outseta.com/api-reference/crm/request-a-passwordless-magic-link-to-sign-in.md): Sends an email containing a single-use, time-limited link that signs the recipient in without a password. Always responds 200 regardless of whether the email matches a known user or whether the feature is enabled, so the endpoint cannot be used to enumerate accounts. - [Retrieve all deals.](https://docs.outseta.com/api-reference/crm/retrieve-all-deals.md): Returns the deals associated with your account. - [Retrieve a deal.](https://docs.outseta.com/api-reference/crm/retrieve-a-deal.md) - [Add a new deal.](https://docs.outseta.com/api-reference/crm/add-a-new-deal.md) - [Update a deal.](https://docs.outseta.com/api-reference/crm/update-a-deal.md) - [Delete a deal.](https://docs.outseta.com/api-reference/crm/delete-a-deal.md) - [Retrieve all custom attribute definitions.](https://docs.outseta.com/api-reference/attribute/retrieve-all-custom-attribute-definitions.md): entityType is the name of an EntityType enum value, for example: Account, Person, Deal. Definitions describe the labels, system names, and control types of the custom attributes that have been added to that entity. - [Retrieve a custom attribute definition.](https://docs.outseta.com/api-reference/attribute/retrieve-a-custom-attribute-definition.md): The entityType segment of the URL must match the type the definition belongs to (e.g. Account, Person, Deal). - [Retrieve the tags on a record.](https://docs.outseta.com/api-reference/crm/retrieve-the-tags-on-a-record.md): Returns the tags themselves, not the links that hold them. The same tags are also available on the record: ask for them with the fields parameter, for example fields=Uid,Tags.Uid,Tags.Name,Tags.TagColor. Tags cost an extra query, so the record leaves them out unless fields names Tags or is a plain w… - [Add tags to a record.](https://docs.outseta.com/api-reference/crm/add-tags-to-a-record.md): Send the uids of the tags to add. Tags that the record already carries stay on it, and naming one of them again changes nothing, so the same request is safe to repeat. To replace the whole set instead, use PUT on this same path. A tag belongs to one entity type, so use tags whose Entity… - [Replace the tags on a record.](https://docs.outseta.com/api-reference/crm/replace-the-tags-on-a-record.md): Send the full set of tags the record must end with. A tag that the list leaves out is taken off the record, and one that the list names is added. Send an empty list to take every tag off. To add tags without disturbing the others, use POST on this same path. A tag belongs to one entity… - [Remove one tag from a record.](https://docs.outseta.com/api-reference/crm/remove-one-tag-from-a-record.md): The tag itself is kept and stays available for other records. If the record does not carry the tag, nothing changes and the call still succeeds. - [Retrieve all broadcasts.](https://docs.outseta.com/api-reference/email/retrieve-all-broadcasts.md): Archived broadcasts are excluded. - [Retrieve a broadcast.](https://docs.outseta.com/api-reference/email/retrieve-a-broadcast.md) - [Create a new broadcast.](https://docs.outseta.com/api-reference/email/create-a-new-broadcast.md): To copy an existing broadcast, retrieve it and pass its data as the request body — the Uid, SendDateTime, and message counts are automatically reset. A new broadcast is always created as a Draft; schedule it by updating it with a SendDateTime (see the update endpoint). Specify who the b… - [Update a broadcast.](https://docs.outseta.com/api-reference/email/update-a-broadcast.md): Setting SendDateTime to a future UTC date schedules the broadcast for sending and its status changes to Pending. An account may only have 5 broadcasts scheduled or sending at one time; scheduling beyond that is rejected until one finishes sending or is unscheduled. There is no limit on the number of… - [Delete a broadcast.](https://docs.outseta.com/api-reference/email/delete-a-broadcast.md): Only broadcasts in Draft or Pending status can be deleted. Broadcasts that have been processed should be archived instead. - [Archive a broadcast.](https://docs.outseta.com/api-reference/email/archive-a-broadcast.md): Archived broadcasts are excluded from the default list results. - [Unschedule a broadcast.](https://docs.outseta.com/api-reference/email/unschedule-a-broadcast.md): Unschedules a pending broadcast, reverting its status to Draft. - [Send a test email for a broadcast.](https://docs.outseta.com/api-reference/email/send-a-test-email-for-a-broadcast.md): Sends to the logged-in user and optionally to additional recipients. Additional recipients are specified as a list of person Uids and must belong to the same account as the logged-in user. - [Retrieve the tags on a record.](https://docs.outseta.com/api-reference/email/retrieve-the-tags-on-a-record.md): Returns the tags themselves, not the links that hold them. The same tags are also available on the record: ask for them with the fields parameter, for example fields=Uid,Tags.Uid,Tags.Name,Tags.TagColor. Tags cost an extra query, so the record leaves them out unless fields names Tags or is a plain w… - [Add tags to a record.](https://docs.outseta.com/api-reference/email/add-tags-to-a-record.md): Send the uids of the tags to add. Tags that the record already carries stay on it, and naming one of them again changes nothing, so the same request is safe to repeat. To replace the whole set instead, use PUT on this same path. A tag belongs to one entity type, so use tags whose Entity… - [Replace the tags on a record.](https://docs.outseta.com/api-reference/email/replace-the-tags-on-a-record.md): Send the full set of tags the record must end with. A tag that the list leaves out is taken off the record, and one that the list names is added. Send an empty list to take every tag off. To add tags without disturbing the others, use POST on this same path. A tag belongs to one entity… - [Remove one tag from a record.](https://docs.outseta.com/api-reference/email/remove-one-tag-from-a-record.md): The tag itself is kept and stays available for other records. If the record does not carry the tag, nothing changes and the call still succeeds. - [Retrieve all drip campaigns.](https://docs.outseta.com/api-reference/email/retrieve-all-drip-campaigns.md) - [Retrieve a drip campaign.](https://docs.outseta.com/api-reference/email/retrieve-a-drip-campaign.md) - [Create a new drip campaign.](https://docs.outseta.com/api-reference/email/create-a-new-drip-campaign.md): To copy an existing drip campaign, retrieve it and pass its data as the request body — the Uid and per-message counts are automatically reset. Messages can be supplied inline via DripCampaignMessages, or added later with the messages endpoint. Each inline message's Name defaults to its position (e.g… - [Update a drip campaign.](https://docs.outseta.com/api-reference/email/update-a-drip-campaign.md): Activating a drip campaign (setting IsActive) begins sending its messages to members. StartDripToExistingMembers controls whether members already in the campaign receive the messages or only members added going forward. - [Delete a drip campaign.](https://docs.outseta.com/api-reference/email/delete-a-drip-campaign.md) - [Add a message to a drip campaign.](https://docs.outseta.com/api-reference/email/add-a-message-to-a-drip-campaign.md): Adding a message deactivates the drip campaign so its schedule can be reviewed before it resumes sending. Use DelayInHours to control how long after the trigger the message is sent. - [Retrieve a message from a drip campaign.](https://docs.outseta.com/api-reference/email/retrieve-a-message-from-a-drip-campaign.md) - [Update a message in a drip campaign.](https://docs.outseta.com/api-reference/email/update-a-message-in-a-drip-campaign.md): Changing DelayInHours on an active drip campaign reschedules the drip for its existing members. The DripCampaign Uid on the body, if supplied, must match the dripCampaignUid in the URL, and the message Uid on the body must match the dripCampaignMessageUid in the URL. - [Delete a message from a drip campaign.](https://docs.outseta.com/api-reference/email/delete-a-message-from-a-drip-campaign.md): Deleting a message deactivates the drip campaign (like adding a message) so its schedule can be reviewed before it resumes. Reactivate the campaign to resume sending. - [Send a test email for a drip campaign.](https://docs.outseta.com/api-reference/email/send-a-test-email-for-a-drip-campaign.md): Sends the drip campaign to the logged-in user and optionally to additional recipients. Additional recipients are specified as a list of person Uids and must belong to the same account as the logged-in user. Sending is skipped when the account is restricted due to unpaid invoices. - [Retrieve all subscribers to an email list.](https://docs.outseta.com/api-reference/email/retrieve-all-subscribers-to-an-email-list.md) - [Subscribe a person to an email list.](https://docs.outseta.com/api-reference/email/subscribe-a-person-to-an-email-list.md): To subscribe a new person, pass a Person object with an Email address. To subscribe an existing person, pass a Person object with a Uid. The SendWelcomeEmail property determines if the person is sent a welcome email and defaults to false. - [Publicly subscribe a person to an email list.](https://docs.outseta.com/api-reference/public/publicly-subscribe-a-person-to-an-email-list.md): This endpoint does not require authentication. The email list must be public, and the subscription is subject to bot protection and the list's double opt-in settings. - [Remove a subscriber from an email list.](https://docs.outseta.com/api-reference/email/remove-a-subscriber-from-an-email-list.md) - [Retrieve all email lists.](https://docs.outseta.com/api-reference/email/retrieve-all-email-lists.md) - [Create an email list.](https://docs.outseta.com/api-reference/email/create-an-email-list.md): Name is required and must be unique. Set RequiresDoubleOptIn to true to require new subscribers to confirm their subscription. WelcomeSubject and WelcomeBody configure an optional welcome email; use WelcomeFromName and WelcomeFromEmail to set its sender. - [Retrieve an email list.](https://docs.outseta.com/api-reference/email/retrieve-an-email-list.md) - [Update an email list.](https://docs.outseta.com/api-reference/email/update-an-email-list.md): The Uid may be omitted from the request body. If supplied, it must match the Uid in the URL. - [Delete an email list.](https://docs.outseta.com/api-reference/email/delete-an-email-list.md): Deleting a list also removes all of its subscriptions. - [Retrieve all knowledge base categories.](https://docs.outseta.com/api-reference/support/retrieve-all-knowledge-base-categories.md) - [Retrieve all knowledge base articles.](https://docs.outseta.com/api-reference/support/retrieve-all-knowledge-base-articles.md) - [Retrieve a knowledge base article.](https://docs.outseta.com/api-reference/support/retrieve-a-knowledge-base-article.md) - [Create a knowledge base article.](https://docs.outseta.com/api-reference/support/create-a-knowledge-base-article.md) - [Retrieve the tags on a record.](https://docs.outseta.com/api-reference/support/retrieve-the-tags-on-a-record.md): Returns the tags themselves, not the links that hold them. The same tags are also available on the record: ask for them with the fields parameter, for example fields=Uid,Tags.Uid,Tags.Name,Tags.TagColor. Tags cost an extra query, so the record leaves them out unless fields names Tags or is a plain w… - [Add tags to a record.](https://docs.outseta.com/api-reference/support/add-tags-to-a-record.md): Send the uids of the tags to add. Tags that the record already carries stay on it, and naming one of them again changes nothing, so the same request is safe to repeat. To replace the whole set instead, use PUT on this same path. A tag belongs to one entity type, so use tags whose Entity… - [Replace the tags on a record.](https://docs.outseta.com/api-reference/support/replace-the-tags-on-a-record.md): Send the full set of tags the record must end with. A tag that the list leaves out is taken off the record, and one that the list names is added. Send an empty list to take every tag off. To add tags without disturbing the others, use POST on this same path. A tag belongs to one entity… - [Remove one tag from a record.](https://docs.outseta.com/api-reference/support/remove-one-tag-from-a-record.md): The tag itself is kept and stays available for other records. If the record does not carry the tag, nothing changes and the call still succeeds. - [Retrieve all cases.](https://docs.outseta.com/api-reference/support/retrieve-all-cases.md): Optionally filtered by search string, tag, and/or assignment. Assigned cases can be filtered by passing in the AssignedToPersonClientIdentifier, which is the Uid of the person the case is assigned to. - [Retrieve a case.](https://docs.outseta.com/api-reference/support/retrieve-a-case.md) - [Adds a case into the support system.](https://docs.outseta.com/api-reference/support/adds-a-case-into-the-support-system.md) - [Adds a response to the case from the person that opened the case.](https://docs.outseta.com/api-reference/support/adds-a-response-to-the-case-from-the-person-that-opened-the-case.md) - [Adds a reply from an agent to a support case.](https://docs.outseta.com/api-reference/support/adds-a-reply-from-an-agent-to-a-support-case.md) - [Update a support ticket.](https://docs.outseta.com/api-reference/support/update-a-support-ticket.md): The Uid in the URL identifies the ticket, and a Uid in the request body is ignored. Any property that the body does not contain keeps its current value, so a request can send only the properties that change. Tags are managed through the CaseTags collection. Send the full set of tags tha… - [Permanently delete a support ticket.](https://docs.outseta.com/api-reference/support/permanently-delete-a-support-ticket.md): The ticket is deleted together with all its replies, notes, tags and attachments. This cannot be undone. The ticket and its history are gone when the request returns. Its attachment files, its search entry, and the logs of the emails and activities that relate to it are removed in the b… - [Retrieve all activities.](https://docs.outseta.com/api-reference/activity/retrieve-all-activities.md): One or multiple parameters can be defined to filter the results. ActivityType=[100,101] where ActivityUpdated = 100 and AcccountUpdated = 101. Results will be limited to the last year unless ActivityDateTime is specified, possibly with ActivityDateTime__gt/ActivityDateTime__gte and ActivityDateTime_… - [Record a custom event associated to an account, person or deal.](https://docs.outseta.com/api-reference/activity/record-a-custom-event-associated-to-an-account-person-or-deal.md): These activities show up on the activity feed of the corresponding entity and can be leveraged to trigger drip campaigns and other automation. For integration with drip campaigns make sure that what you pass in the Title property matches the start / stop value specified for the campaign. - [Retrieve all tags.](https://docs.outseta.com/api-reference/attribute/retrieve-all-tags.md): Each tag applies to a single entity type. Pass entityType to retrieve the tags for one of them, for example entityType=Article for knowledge base article tags. How a tag goes onto a record depends on the entity type. Articles, broadcasts and segments each take tags on a tags sub-resourc… - [Create a tag.](https://docs.outseta.com/api-reference/attribute/create-a-tag.md): Name and EntityType are required. EntityType fixes what the tag can go on: 4 (Case) for support tickets, 13 (Article) for knowledge base articles, 12 (Broadcast) for broadcast emails, 11 (Segment) for segments. TagColor sets the color the tag shows in. Name must be unique within an enti… - [Retrieve a tag.](https://docs.outseta.com/api-reference/attribute/retrieve-a-tag.md) - [Update a tag.](https://docs.outseta.com/api-reference/attribute/update-a-tag.md): Use this to rename a tag or to change its color. EntityType cannot be changed after the tag is created. Name must stay unique within the entity type. SystemName and SystemDescription are set by Outseta and cannot be changed. - [Delete a tag.](https://docs.outseta.com/api-reference/attribute/delete-a-tag.md): The tag is also taken off every record that carries it. For a Case tag, it is removed from all support tickets that have it. An Article tag that the knowledge base version filter names cannot be deleted. Take it out of the version filter first, then delete it. - [The one-off emails that were sent from this email template.](https://docs.outseta.com/api-reference/template/the-one-off-emails-that-were-sent-from-this-email-template.md): Add personUid to the query string to see what one person was sent from this template. - [Send an email template to a single person as a one-off email.](https://docs.outseta.com/api-reference/template/send-an-email-template-to-a-single-person-as-a-one-off-email.md): The email is merge-rendered for the person and sent immediately. No broadcast is created. People who have bounced, unsubscribed or reported spam are not sent the email. Only templates from Email > Email templates can be sent. The response holds the record of the send. Read the open and… - [The one-off emails that were sent from any email template.](https://docs.outseta.com/api-reference/template/the-one-off-emails-that-were-sent-from-any-email-template.md): Filter with personUid to see what one person was sent, or with templateUid to restrict the results to a single template. ## OpenAPI Specs - [openapi](/api-reference/openapi.json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.