openapi: 3.2.0 info: title: Karbonhq Contacts API version: v3 contact: name: API Support url: https://developers.karbonhq.com/issues/ license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: https://karbonhq.com/terms-of-use/ description: 'Operations tagged Contacts across 2 of this provider''s published API definitions: KarbonAPI.json, karbonhq-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://api.karbonhq.com description: The production API server security: - ApiKeyAuth: [] BearerAuth: [] tags: - name: Contacts description: Manage your contacts and get the full overview over clients, whether they are individuals or organizations. Read more paths: /v3/Contacts: get: tags: - Contacts summary: Gets a list of Contacts parameters: - in: query name: $filter schema: type: string examples: FullName: value: FullName eq 'Sample Management Team summary: Return only the Contacts where the Full Name matches 'Sample Client Team' EmailAddress: value: EmailAddress eq 'karbon@example.com' summary: Return only the Contacts where the Email Address matches 'karbon@example.com' PhoneNumber: value: PhoneNumber eq '220114588' summary: Return only the Contacts where the Phone Number matches '220114588' ContactType: value: ContactType eq 'Client' summary: Return only the Contacts where the Contact Type matches 'Client' externalKey: value: ExternalKey eq '123987456' summary: Return only the Contacts whose ExternalKey matches '123987456'. ExternalKey is the identifier from an integrated external system - XPM Client ID, Xero Contact ID, or QuickBooks Online Intuit Customer ID. Only the eq operator is supported. description: 'When this parameter is combined with the URI, this endpoint will return a subset of the Contacts that satisfy the `$filter` expression. ' - in: query name: $orderby schema: type: string enum: - FullName - FullName desc - LastModifiedDateTime - LastModifiedDateTime desc default: ClientGroupKey example: FullName description: 'When this parameter is combined with the URI, this endpoint will return a list of Contacts, sorted by the available properties. ' - $ref: '#/components/parameters/SkipRecords' - $ref: '#/components/parameters/TopRecords' description: 'Use the `GET` method on this endpoint to receive a paginated list of Contacts from your tenant. Using the query parameters available to this endpoint, you can also filter the list of Contacts by their full name, email address, or phone number. **Notes** This endpoint returns a maximum of 100 Contacts at once. If the query results in more than 100 Contacts, a link to the next set of the results will be given in the `@odata.nextLink` field of the response. The `$filter` query parameter supports 3 logical operators (`eq`, `contains`, and `and`) and 3 properties to help you form an expression. Usage examples below Logical Operators Purpose FullName EmailAddress PhoneNumber eq Full-text search /v3/Contacts?$filter=FullName eq ''Sample Management Team'' /v3/Contacts?$filter=EmailAddress eq ''sample@company.com'' /v3/Contacts?$filter=PhoneNumber eq ''1234567890'' contains Partial-text search /v3/Contacts?$filter=(contains(FullName, ''Management Team'')) /v3/Contacts?$filter=(contains(EmailAddress, ''sample@'')) /v3/Contacts?$filter=(contains(PhoneNumber, ''45678'')) and Combines properties /v3/Contacts?$filter=PhoneNumber eq ''1234567890'' and contains(FullName, ''Management Team'')' operationId: getAllContacts responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/GetContacts' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Unsupported Property: $ref: '#/components/examples/Unsupported_Property_Filter' Unsupported Orderby Property: $ref: '#/components/examples/Orderby_Unsupported_Property' $top limit exceeded: $ref: '#/components/examples/Limit_Exceeded_Top' Unsupported Option: $ref: '#/components/examples/Unsupported_option' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ResourceNotFound' examples: Unauthorized Access: $ref: '#/components/examples/UnauthorizedAccess' '429': description: Rate Limit Exceeded content: application/json: schema: $ref: '#/components/schemas/RateLimitErrorMessage' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Undefined Error: $ref: '#/components/examples/elongated_5001' post: tags: - Contacts summary: Creates a new Contact description: Use the `POST` method on this endpoint to create a new Contact in your tenant. operationId: createContact responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ResponseCreateContact' example: '@odata.context': https://api.karbonhq.com/v3/$metadata#Contacts/KarbonService.ContactDTO/$entity '@odata.type': '#KarbonService.ContactDTO' ContactKey: 67zlxNyJSr8e FirstName: William MiddleName: John LastName: Connor PreferredName: Bill Salutation: Mr Suffix: Jr. ClientOwner: rodney.muller@samplecompany.com ClientManager: jessica.tse@samplecompany.com ContactType: Client UserDefinedIdentifier: BILLJR RestrictionLevel: Public AvatarUrl: https://az.karbonemail.com/images/e4ae96c1-8d17-4c6e-af8a-8040482176fc LastModifiedDateTime: '2022-07-05T07:30:13.7188114Z' EntityDescription: Text: Birthday on June 23. AccountingDetail: ContactPermaKey: 67zlxNyJSr8e OrganizationPermaKey: null BirthDate: '1969-08-05T00:00:00Z' DeathDate: null Salutation: Mr Sex: M FinancialYearEndDay: 30 FinancialYearEndMonth: 8 IncorporationDate: null IncorporationState: null LegalName: null LineOfBusiness: null EntityType: null TaxCountryCode: US TradingName: null AnnualRevenue: null BaseCurrency: null GstBasis: null GstPeriod: null IncomeTaxInstallmentPeriod: Yearly IsVATRegistered: null OrganizationValuation: null PaysTax: null PrepareGST: null ProvisionalTaxBasic: null ProvisionalTaxRatio: null RevenueModel: null SalesTaxBasis: null SalesTaxPeriod: null Sells: null RegistrationNumbers: - RegistrationNumber: 12-3456789 Type: Social Security Number (SSN) Notes: - Body: This is a sample note text. Type: Basic BusinessCards: - BusinessCardKey: 2tBHyXtJBxBy EntityType: Contact EntityKey: 67zlxNyJSr8e IsPrimaryCard: true WebSites: - www.website.one - www.website.two EmailAddresses: - sample@example.com - sample.two@example.com OrganizationKey: ZGNmtYyLm4z RoleOrTitle: COO FacebookLink: facebook.com/sampleName LinkedInLink: linkedin.com/sampleName TwitterLink: twitter.com/sampleName SkypeLink: skype.com/sampleName Addresses: - AddressKey: e150a05a-2dea-4292-8bc8-03398c9384e4 AddressLines: 45 Sample Street City: Alexandria StateProvinceCounty: NSW ZipCode: '2015' CountryCode: AU Label: Physical PhoneNumbers: - PhoneNumberKey: 6e0b9ace-24b1-4328-a922-3b8be5ef5052 Number: '1234567890' CountryCode: AU Label: Work headers: Location: description: The endpoint URL to the newly created Contact. schema: type: string example: https://api.karbonhq.com/v3/Contacts('9zgh8pk1dfL')/KarbonService.ContactDTO '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Incorrect or Missing Data: $ref: '#/components/examples/Missing_Create_Data' Unsupported Property: $ref: '#/components/examples/Update_Unsupported_Property' Unsupported Option: $ref: '#/components/examples/Unsupported_option' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ResourceNotFound' examples: Unauthorized Access: $ref: '#/components/examples/UnauthorizedAccess' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Permission Denied: $ref: '#/components/examples/RestrictionLevel_Permission_Denied' '429': description: Rate Limit Exceeded content: application/json: schema: $ref: '#/components/schemas/RateLimitErrorMessage' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Duplicate UDI: $ref: '#/components/examples/Duplicate_UDI' Undefined Error: $ref: '#/components/examples/elongated_5001' requestBody: description: Refer to the table below for more information on each field in the request body. required: true content: application/json: schema: $ref: '#/components/schemas/CreateContact' servers: - url: https://api.karbonhq.com description: The production API server /v3/Contacts/GetContactByUserDefinedIdentifier(UserDefinedIdentifier='{UserDefinedIdentifier}'): get: tags: - Contacts summary: Gets a Contact using UserDefinedIdentifier parameters: - required: true in: path name: UserDefinedIdentifier schema: type: string example: BILLJR description: A unique identifier that you had created to identify this Contact. This parameter is **not** case sensitive. - in: query name: $expand schema: type: string enum: - BusinessCards - ServiceTypes example: BusinessCards description: 'When this parameter is combined with the URI, this endpoint will also return the Business Cards or Service Types of the Contact. ' description: 'Use the `GET` method on this endpoint to receive the details of a Contact specified using the UserDefinedIdentifier. Using the query parameter available to this endpoint, you can also include Business Card details of the Contact in the response.' operationId: getContactByUDI responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/ResponseCreateContact' example: '@odata.context': https://api.karbonhq.com/v3/$metadata#Contacts/KarbonService.ContactDTO/$entity '@odata.type': '#KarbonService.ContactDTO' ContactKey: 67zlxNyJSr8e FirstName: William MiddleName: John LastName: Connor PreferredName: Bill Salutation: Mr Suffix: Jr. ClientOwner: rodney.muller@samplecompany.com ClientManager: jessica.tse@samplecompany.com ContactType: Client UserDefinedIdentifier: BILLJR RestrictionLevel: Public AvatarUrl: https://az.karbonemail.com/images/e4ae96c1-8d17-4c6e-af8a-8040482176fc LastModifiedDateTime: '2022-07-05T07:30:13.7188114Z' EntityDescription: Text: Birthday on June 23. AccountingDetail: ContactPermaKey: 67zlxNyJSr8e OrganizationPermaKey: null BirthDate: '1969-08-05T00:00:00Z' DeathDate: null Salutation: Mr Sex: M FinancialYearEndDay: 30 FinancialYearEndMonth: 8 IncorporationDate: null IncorporationState: null LegalName: null LineOfBusiness: null EntityType: null TaxCountryCode: US TradingName: null AnnualRevenue: null BaseCurrency: null GstBasis: null GstPeriod: null IncomeTaxInstallmentPeriod: Quarterly IsVATRegistered: null OrganizationValuation: null PaysTax: null PrepareGST: null ProvisionalTaxBasic: null ProvisionalTaxRatio: null RevenueModel: null SalesTaxBasis: null SalesTaxPeriod: null Sells: null RegistrationNumbers: - RegistrationNumber: 12-3456789 Type: Social Security Number (SSN) Notes: - Body: This is a sample note text. Type: Basic BusinessCards: - BusinessCardKey: 2tBHyXtJBxBy EntityType: Contact EntityKey: 67zlxNyJSr8e IsPrimaryCard: true WebSites: - www.website.one - www.website.two EmailAddresses: - sample@example.com - sample.two@example.com OrganizationKey: ZGNmtYyLm4z RoleOrTitle: COO FacebookLink: facebook.com/sampleName LinkedInLink: linkedin.com/sampleName TwitterLink: twitter.com/sampleName SkypeLink: skype.com/sampleName Addresses: - AddressKey: e150a05a-2dea-4292-8bc8-03398c9384e4 AddressLines: 45 Sample Street City: Alexandria StateProvinceCounty: NSW ZipCode: '2015' CountryCode: AU Label: Physical PhoneNumbers: - PhoneNumberKey: 6e0b9ace-24b1-4328-a922-3b8be5ef5052 Number: '1234567890' CountryCode: AU Label: Work '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: UDI Is Empty: $ref: '#/components/examples/UDI_Is_Empty' Unsupported Option: $ref: '#/components/examples/Unsupported_option' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ResourceNotFound' examples: Unauthorized Access: $ref: '#/components/examples/UnauthorizedAccess' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: UDI Not Found: $ref: '#/components/examples/UDI_Not_Found_Contact' '429': description: Rate Limit Exceeded content: application/json: schema: $ref: '#/components/schemas/RateLimitErrorMessage' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Undefined Error: $ref: '#/components/examples/elongated_5001' servers: - url: https://api.karbonhq.com description: The production API server /v3/Contacts/{Contactkey}: get: tags: - Contacts summary: Gets a Contact using Contactkey parameters: - required: true in: path name: Contactkey schema: type: string example: 4jgPTtcXxwC2 description: The Karbon-generated Contact key - in: query name: $expand schema: type: string enum: - BusinessCards - ClientTeam - ClientAccess - ServiceTypes example: BusinessCards description: 'When this parameter is combined with the URI, this endpoint will also return one or more of the following: Business Cards for the Contact, the Client Team assigned to the Contact, a list of other Contacts that can access this Contact in Karbon for Clients, or the Service Types assigned to the Contact.' description: 'Use the `GET` method on this endpoint to receive the details of a Contact specified using the `Contactkey`. Using the query parameter available to this endpoint, you can also include the Business Card details of the Contacts in the response.' operationId: getContactByID responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/ResponseCreateContact' example: '@odata.context': https://api.karbonhq.com/v3/$metadata#Contacts/KarbonService.ContactDTO/$entity '@odata.type': '#KarbonService.ContactDTO' ContactKey: 67zlxNyJSr8e FirstName: William MiddleName: John LastName: Connor PreferredName: Bill Salutation: Mr Suffix: Jr. ClientOwner: rodney.muller@samplecompany.com ClientManager: jessica.tse@samplecompany.com ContactType: Client UserDefinedIdentifier: BILLJR RestrictionLevel: Public AvatarUrl: https://az.karbonemail.com/images/e4ae96c1-8d17-4c6e-af8a-8040482176fc LastModifiedDateTime: '2022-07-05T07:30:13.7188114Z' EntityDescription: Text: Birthday on June 23. AccountingDetail: ContactPermaKey: 67zlxNyJSr8e OrganizationPermaKey: null BirthDate: '1969-08-05T00:00:00Z' DeathDate: null Salutation: Mr Sex: M FinancialYearEndDay: 30 FinancialYearEndMonth: 8 IncorporationDate: null IncorporationState: null LegalName: null LineOfBusiness: null EntityType: null TaxCountryCode: US TradingName: null AnnualRevenue: null BaseCurrency: null GstBasis: null GstPeriod: null IncomeTaxInstallmentPeriod: Quarterly IsVATRegistered: null OrganizationValuation: null PaysTax: null PrepareGST: null ProvisionalTaxBasic: null ProvisionalTaxRatio: null RevenueModel: null SalesTaxBasis: null SalesTaxPeriod: null Sells: null RegistrationNumbers: - RegistrationNumber: 12-3456789 Type: Social Security Number (SSN) Notes: - Body: This is a sample note text. Type: Basic BusinessCards: - BusinessCardKey: 2tBHyXtJBxBy EntityType: Contact EntityKey: 67zlxNyJSr8e IsPrimaryCard: true WebSites: - www.website.one - www.website.two EmailAddresses: - sample@example.com - sample.two@example.com OrganizationKey: ZGNmtYyLm4z RoleOrTitle: COO FacebookLink: facebook.com/sampleName LinkedInLink: linkedin.com/sampleName TwitterLink: twitter.com/sampleName SkypeLink: skype.com/sampleName Addresses: - AddressKey: e150a05a-2dea-4292-8bc8-03398c9384e4 AddressLines: 45 Sample Street City: Alexandria StateProvinceCounty: NSW ZipCode: '2015' CountryCode: AU Label: Physical PhoneNumbers: - PhoneNumberKey: 6e0b9ace-24b1-4328-a922-3b8be5ef5052 Number: '1234567890' CountryCode: AU Label: Work ClientTeam: - MemberKey: JTphCpQqQYg MemberType: User RoleType: ClientOwner - MemberKey: nRML2ngs7WJ MemberType: User RoleType: ClientManager - MemberKey: 3fv7lflmd1Z7 MemberType: User RoleType: UserDefinedRole2 - MemberKey: 3v9YJmt55hLY MemberType: User RoleType: UserDefinedRole1 - MemberKey: 3zdQh89xCmZM MemberType: User RoleType: null ClientAccess: - ClientKey: 67zlxNyJSr8e ClientType: Contact AccessLevel: Limited '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Unsupported Property: $ref: '#/components/examples/Update_Unsupported_Property' Unsupported Option: $ref: '#/components/examples/Unsupported_option' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ResourceNotFound' examples: Unauthorized Access: $ref: '#/components/examples/UnauthorizedAccess' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Key Not Found: $ref: '#/components/examples/ContactKey_Not_Found' '429': description: Rate Limit Exceeded content: application/json: schema: $ref: '#/components/schemas/RateLimitErrorMessage' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Undefined Error: $ref: '#/components/examples/elongated_5001' put: tags: - Contacts summary: Updates a Contact (Full) parameters: - required: true in: path name: Contactkey schema: type: string example: 4t8LbR1QcbGS description: The Karbon-generated Contact key description: 'Use the `PUT` method on this endpoint to update full details of a Contact specified using the `Contactkey`. Using the query parameter `$expand` with this endpoint, you can also update the Business Card details of the Contact. **Note:** When updating business cards, you must include `BusinessCardKey`, `EntityType` and `EntityKey` properties for existing Business Cards - or the existing card and any associated Client Requests may be removed. **BusinessCards is optional:** If the `BusinessCards` array is omitted from the request body, the existing Business Cards on the Contact are left untouched. Include the `BusinessCards` array only when you intend to update it. **RegistrationNumber null/empty values delete the entry:** If a `RegistrationNumbers` entry is included with a null, empty, or whitespace `RegistrationNumber` value, any existing registration number of that `Type` is deleted. If no entry exists for that `Type`, the request is a no-op. Non-blank values continue to upsert as before.' operationId: putContactByID responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Incorrect or Missing Data: $ref: '#/components/examples/Missing_Update_Data' Unsupported Option: $ref: '#/components/examples/Unsupported_option' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ResourceNotFound' examples: Unauthorized Access: $ref: '#/components/examples/UnauthorizedAccess' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Permission Denied: $ref: '#/components/examples/RestrictionLevel_Permission_Denied' '404': description: Resource Not Found content: application/json: schema: $ref: '#/components/schemas/ResourceNotFound' examples: Key Not Found: $ref: '#/components/examples/ResourceNotFound' '429': description: Rate Limit Exceeded content: application/json: schema: $ref: '#/components/schemas/RateLimitErrorMessage' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Non existent Key: $ref: '#/components/examples/Shortened_5001' Undefined Error: $ref: '#/components/examples/elongated_5001' '409': description: Conflict — the resource was modified by another request. Refetch the latest version and retry. content: application/json: schema: $ref: '#/components/schemas/ErrorMessages' examples: Stale Object State: $ref: '#/components/examples/Conflict_StaleObjectState' requestBody: description: Refer to the table below for more information on each field in the request body. required: true content: application/json: schema: $ref: '#/components/schemas/CreateContact' patch: tags: - Contacts summary: Updates a Contact (Partial) parameters: - required: true in: path name: Contactkey schema: type: string example: 4t8LbR1QcbGS description: The Karbon-generated Contact key description: 'Use the `PATCH` method on this endpoint to update partial details of a Contact specified using the `Contactkey`. This method **only supports** editing the `FirstName`, `MiddleName`, `LastName`, `PreferredName`, `Salutation`, `Suffix` and `RestrictionLevel` properties.' operationId: patchContactsByID responses: '200': description: OK content: application/json: schema: type: object properties: '@odata.context': type: string description: The information about Karbon controllers generating this response. '@odata.type': type: string description: The information about Karbon Objects generating this response. ContactKey: type: string description: A Karbon-generated value that is used to identify the Contact FirstName: type: string description: The first name of the Contact MiddleName: type: string description: The middle name of the Contact LastName: type: string description: The last name of the Contact PreferredName: type: string description: The preferred name of the Contact Salutation: type: string description: The title to address the Contact Suffix: type: string description: The suffix of the Contact ClientOwner: type: string description: The team member in your firm who looks after client relationship or is responsible for the vast majority of the work of the Contact. You can only use the UserKey or the email address of an existing team member. ClientManager: type: string description: The team member in your firm who manages the work for Contact. You can only use the UserKey or the email address of an existing team member. example: jessica.tse@samplecompany.com ContactType: type: string description: The Contact Type for this Contact. You can only use existing Contact Types, these are available from the TenantSettings endpoint. UserDefinedIdentifier: type: string description: A unique key that you can use to identify this Contact. RestrictionLevel: type: string description: 'The privacy level for this Client Group.