# Outseta API > REST API reference for Outseta — the all-in-one platform for SaaS founders. ## Docs - [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. - [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 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_… - [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 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. - [Add a discount to a subscription.](https://docs.outseta.com/api-reference/billing/add-a-discount-to-a-subscription.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). - [Add a new plan.](https://docs.outseta.com/api-reference/billing/add-a-new-plan.md) - [Add a new plan family.](https://docs.outseta.com/api-reference/billing/add-a-new-plan-family.md) - [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. - [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. - [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) - [Add an add-on to a subscription.](https://docs.outseta.com/api-reference/billing/add-an-add-on-to-a-subscription.md) - [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. - [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) - [Delete a discount coupon.](https://docs.outseta.com/api-reference/billing/delete-a-discount-coupon.md) - [Delete a plan.](https://docs.outseta.com/api-reference/billing/delete-a-plan.md) - [Delete a plan family.](https://docs.outseta.com/api-reference/billing/delete-a-plan-family.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. - [Delete an invoice.](https://docs.outseta.com/api-reference/billing/delete-an-invoice.md) - [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. - [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. - [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. - [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. - [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. - [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. - [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.](https://docs.outseta.com/api-reference/billing/retrieve-a-discount-coupon.md) - [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. - [Retrieve a plan.](https://docs.outseta.com/api-reference/billing/retrieve-a-plan.md) - [Retrieve a plan family.](https://docs.outseta.com/api-reference/billing/retrieve-a-plan-family.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. - [Retrieve a subscription.](https://docs.outseta.com/api-reference/billing/retrieve-a-subscription.md) - [Retrieve a subscription add-on.](https://docs.outseta.com/api-reference/billing/retrieve-a-subscription-add-on.md) - [Retrieve all discount coupons.](https://docs.outseta.com/api-reference/billing/retrieve-all-discount-coupons.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. - [Retrieve all plan families.](https://docs.outseta.com/api-reference/billing/retrieve-all-plan-families.md) - [Retrieve all plans.](https://docs.outseta.com/api-reference/billing/retrieve-all-plans.md) - [Retrieve all subscription add-ons.](https://docs.outseta.com/api-reference/billing/retrieve-all-subscription-add-ons.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 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. - [Retrieve an invoice.](https://docs.outseta.com/api-reference/billing/retrieve-an-invoice.md) - [Retrieve the redemptions of a discount coupon.](https://docs.outseta.com/api-reference/billing/retrieve-the-redemptions-of-a-discount-coupon.md) - [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 a discount coupon.](https://docs.outseta.com/api-reference/billing/update-a-discount-coupon.md) - [Update a plan.](https://docs.outseta.com/api-reference/billing/update-a-plan.md) - [Update a plan family.](https://docs.outseta.com/api-reference/billing/update-a-plan-family.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. - [Update payment information for an account.](https://docs.outseta.com/api-reference/billing/update-payment-information-for-an-account.md) - [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. - [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" } ] } - [Add a new deal.](https://docs.outseta.com/api-reference/crm/add-a-new-deal.md) - [Add a new person.](https://docs.outseta.com/api-reference/crm/add-a-new-person.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. - [Delete a deal.](https://docs.outseta.com/api-reference/crm/delete-a-deal.md) - [Delete a person record.](https://docs.outseta.com/api-reference/crm/delete-a-person-record.md) - [Delete an account record.](https://docs.outseta.com/api-reference/crm/delete-an-account-record.md) - [Extend the date that a trial subscription expires.](https://docs.outseta.com/api-reference/crm/extend-the-date-that-a-trial-subscription-expires.md) - [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. - [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… - [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… - [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. - [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 a deal.](https://docs.outseta.com/api-reference/crm/retrieve-a-deal.md) - [Retrieve a person.](https://docs.outseta.com/api-reference/crm/retrieve-a-person.md) - [Retrieve all accounts.](https://docs.outseta.com/api-reference/crm/retrieve-all-accounts.md): Optionally filtered by segment (segmentUid) or search query (q). - [Retrieve all deals.](https://docs.outseta.com/api-reference/crm/retrieve-all-deals.md): Returns the deals associated with your account. - [Retrieve all people.](https://docs.outseta.com/api-reference/crm/retrieve-all-people.md): Returns the people associated with your account. - [Retrieve an account.](https://docs.outseta.com/api-reference/crm/retrieve-an-account.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. - [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. - [Update a deal.](https://docs.outseta.com/api-reference/crm/update-a-deal.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. - [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. - [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. - [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. - [Archive a broadcast.](https://docs.outseta.com/api-reference/email/archive-a-broadcast.md): Archived broadcasts are excluded from the default list results. - [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… - [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… - [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. - [Delete a drip campaign.](https://docs.outseta.com/api-reference/email/delete-a-drip-campaign.md) - [Delete a message from a drip campaign.](https://docs.outseta.com/api-reference/email/delete-a-message-from-a-drip-campaign.md): If the drip campaign is active, the drip is rescheduled for its existing members after the message is removed. - [Remove a subscriber from an email list.](https://docs.outseta.com/api-reference/email/remove-a-subscriber-from-an-email-list.md) - [Retrieve a broadcast.](https://docs.outseta.com/api-reference/email/retrieve-a-broadcast.md) - [Retrieve a drip campaign.](https://docs.outseta.com/api-reference/email/retrieve-a-drip-campaign.md) - [Retrieve a message from a drip campaign.](https://docs.outseta.com/api-reference/email/retrieve-a-message-from-a-drip-campaign.md) - [Retrieve all broadcasts.](https://docs.outseta.com/api-reference/email/retrieve-all-broadcasts.md): Archived broadcasts are excluded. - [Retrieve all drip campaigns.](https://docs.outseta.com/api-reference/email/retrieve-all-drip-campaigns.md) - [Retrieve all subscribers to an email list.](https://docs.outseta.com/api-reference/email/retrieve-all-subscribers-to-an-email-list.md) - [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. - [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. - [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. - [Unschedule a broadcast.](https://docs.outseta.com/api-reference/email/unschedule-a-broadcast.md): Unschedules a pending broadcast, reverting its status to Draft. - [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… - [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. - [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. - [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: - [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): - [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: - [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: - [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: - [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). - [Post apiv1tokenstwo factorenrolltotpbegin](https://docs.outseta.com/api-reference/public/post-apiv1tokenstwo-factorenrolltotpbegin.md) - [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: - [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: - [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. - [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. - [Adds a case into the support system.](https://docs.outseta.com/api-reference/support/adds-a-case-into-the-support-system.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) - [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) - [Create a knowledge base article.](https://docs.outseta.com/api-reference/support/create-a-knowledge-base-article.md) - [Retrieve a case.](https://docs.outseta.com/api-reference/support/retrieve-a-case.md) - [Retrieve a knowledge base article.](https://docs.outseta.com/api-reference/support/retrieve-a-knowledge-base-article.md) - [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 all knowledge base articles.](https://docs.outseta.com/api-reference/support/retrieve-all-knowledge-base-articles.md) - [Retrieve all knowledge base categories.](https://docs.outseta.com/api-reference/support/retrieve-all-knowledge-base-categories.md) - [Authentication](https://docs.outseta.com/essentials/authentication.md): How to authenticate requests to the Outseta API. - [Introduction](https://docs.outseta.com/index.md): REST API reference for Outseta — auth, billing, user accounts, email, and support, all in one platform. - [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. ## OpenAPI Specs - [openapi](https://docs.outseta.com/api-reference/openapi.json)