consumes: - application/json produces: - application/json schemes: - https swagger: '2.0' info: description: > \ \ \ The Complero API is organized around [REST](http://en.wikipedia.org/wiki/Representational_State_Transfer). Our API has predictable resource-oriented URLs, accepts [form-encoded]() request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. You can use test data, which doesn’t affect your live data or interact with the Contacts. The test flag determines whether the Contact is a live or test Contact. The Complero's API uses bulk operations for data heavy transfers and processes them in the background. You can monitor the operations to see the status of your request. # Errors Complero uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the `2xx` range indicate success. Codes in the `4xx` range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, etc.). Codes in the `5xx` range indicate an error with Complero’s servers (these are rare). # Validation Errors Each validation error is mapped to a specific code. - Tags related to standard validation rules (such as `email`, `uuid`, `min`, etc.) return the generic code `v1c001`. - The `required` tag is treated as a special case and returns v1c002. - Tags specific to Complero's domain, such as `mobilenumber`, `faxnumber`, or `zipcode`, return `v1c004`. - Any other unknown or unrecognized tags fall back to the generic code `v1c003`. # Request IDs Each API request has an associated request identifier. You can find this value in the response headers, under `Request-Id`. To expedite the resolution process, provide the request identifier when you contact us about a specific request. # Pagination Get endpoints that return an array of Models support cursor based pagination. By default, it returns only 1000 events per page and next page can be requested by passing `cursor` query parameter with value from response header `Next-Cursor`. For convenience, response also has header `Next-Link` which contains full link what can be used for requesting next page. Headers `Next-Cursor` and `Next-Link` will be present in the headers as long as next page exists. title: API Reference contact: name: API Support url: https://api.complero.com/ email: support@complero.com version: '1.0' host: api.complero.com basePath: /v1 paths: /contacts: post: security: - ApiKeyAuth: [] description: >- Bulk Upload up to 1000 Contacts. If Contacts already exist their data will be synced with the content of this request. consumes: - application/json produces: - application/json tags: - Contacts summary: Bulk Upload Contacts operationId: BulkUploadContacts parameters: - description: payload name: request in: body required: true schema: type: array items: $ref: '#/definitions/ContactUpload' responses: '202': description: Accepted headers: Operation-Id: type: string description: Id of the created operation associated with this upload Operation-Link: type: string description: API Link to the created operation Request-Id: type: string description: Id that identifies the request '400': description: Bad Request schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '413': description: Request Entity Too Large headers: Request-Id: type: string description: Id that identifies the request '422': description: Unprocessable Entity schema: $ref: '#/definitions/web.PostResponse' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /contacts/{id}: get: security: - ApiKeyAuth: [] description: Get the full Contact by their ID in their most updated state. produces: - application/json tags: - Contacts summary: Get Contact operationId: GetContact parameters: - type: string description: search Contact by their ID name: id in: path required: true responses: '200': description: OK schema: $ref: '#/definitions/Contact' headers: Request-Id: type: string description: Id that identifies the request '404': description: Not Found schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public delete: security: - ApiKeyAuth: [] description: Delete a Contact by their ID. produces: - application/json tags: - Contacts summary: Delete Contact operationId: DeleteContact parameters: - type: string description: delete Contact by their ID name: id in: path required: true responses: '204': description: No Content headers: Request-Id: type: string description: Id that identifies the request '404': description: Not Found schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /documentation/{contactID}: get: security: - ApiKeyAuth: [] description: Get documentation PDF by Contact ID produces: - application/octet-stream - application/json tags: - Events summary: Documentation by contact operationId: GetDocumentation parameters: - type: string description: >- documentation for Contact with specified ID. Returns latest documentation file when eventID not passed name: contactID in: path required: true responses: '200': description: binary with mime type application/pdf schema: type: object '204': description: documentation not generated yet. Please retry later. schema: $ref: '#/definitions/web.Response' '404': description: no documentation events for requested Contact ID or Event ID schema: $ref: '#/definitions/web.Response' '410': description: documentation is not available any longer schema: $ref: '#/definitions/web.Response' '500': description: please try again later or contact our support schema: $ref: '#/definitions/web.Response' x-group: - public /documentation/{contactID}/{eventID}: get: security: - ApiKeyAuth: [] description: Get documentation PDF for Contact by EventID produces: - application/octet-stream - application/json tags: - Events summary: Documentation by event operationId: GetDocumentationEvent parameters: - type: string description: >- documentation for Contact with specified ID. Returns latest documentation file when eventID not passed name: contactID in: path required: true - type: string description: when passed returns documentation for specified Event name: eventID in: path required: true responses: '200': description: binary with mime type application/pdf schema: type: object '204': description: documentation not generated yet. Please retry later. schema: $ref: '#/definitions/web.Response' '404': description: no documentation events for requested Contact ID or Event ID schema: $ref: '#/definitions/web.Response' '410': description: documentation is not available any longer schema: $ref: '#/definitions/web.Response' '500': description: please try again later or contact our support schema: $ref: '#/definitions/web.Response' x-group: - public /employees: post: security: - ApiKeyAuth: [] description: >- Create Employees if they don't exist in the Complero system or update existing ones. tags: - Employees summary: Bulk Upload Employees operationId: BulkUploadEmployees parameters: - description: payload name: request in: body required: true schema: type: array items: $ref: '#/definitions/EmployeeUpload' responses: '202': description: Accepted headers: Operation-Id: type: string description: Id of the created operation associated with this upload Operation-Link: type: string description: API Link to the created operation Request-Id: type: string description: Id that identifies the request '400': description: Bad Request schema: $ref: '#/definitions/web.PostResponse' headers: Request-Id: type: string description: Id that identifies the request '413': description: Request Entity Too Large headers: Request-Id: type: string description: Id that identifies the request '422': description: Unprocessable Entity schema: $ref: '#/definitions/web.PostResponse' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.PostResponse' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /employees/{id}: get: security: - ApiKeyAuth: [] description: Get the full Employee by their Native ID. tags: - Employees summary: Get Employee operationId: GetEmployee parameters: - type: string description: Employee Native ID name: id in: path required: true responses: '200': description: OK schema: $ref: '#/definitions/Employee' '404': description: Not Found schema: $ref: '#/definitions/web.Response' '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public delete: security: - ApiKeyAuth: [] description: >- Delete an Employee by their ID. If the Employee still has assigned Contacts Delete will fail. produces: - application/json tags: - Employees summary: Delete Employee operationId: DeleteEmployee parameters: - type: string description: delete Employee by their Native ID name: id in: path required: true responses: '204': description: No Content '403': description: Forbidden schema: $ref: '#/definitions/web.Response' '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' x-group: - public /events: get: security: - ApiKeyAuth: [] description: Get Contact updates produces: - application/json tags: - Events summary: Get events operationId: GetEvents parameters: - enum: - confirm - update - documentation type: string description: filter events by one or more types name: type in: query - type: string x-example: '2024-09-17T09:19:04Z' description: events occurred *from* this time in an ISO 8601 format name: from in: query - type: string x-example: '2024-10-17T14:50:00Z' description: events occurred up *to* this time in an ISO 8601 format name: to in: query - type: string default: '1000' description: number of events per page name: limit in: query - type: string x-example: MDAwMDAwMDAtMDAwMC0 description: pagination cursor to next page name: cursor in: query responses: '200': description: OK schema: type: array items: $ref: '#/definitions/ContactEvent' headers: Next-Cursor: type: string description: >- cursor value to be used for requesting next page when next page exists Next-Link: type: string description: >- link to request next page with built-in cursor parameter when next page exists Request-Id: type: string description: Id that identifies the request examples: application/json: - contact: birthday: '1985-11-23' company: Beispiel GmbH data: bevorzugtes_kontaktfenster: 09:00-17:00 CET crm_lead_score: '92' documentation: consents: - granted: true granted_agent: Firefox/121.0 granted_at: '2024-10-12T09:22:41Z' granted_ip: 203.0.113.55 id: cnt_adv_001 type: advertisement first_name: Max id: K-2025-00012345 language: de last_name: Mustermann nationality: DE position: Vertriebsleiter salutation: Herr section_private: addresses: - city: München country: DE house_number: 12a street: Musterstraße zip_code: '80331' emails: - max.mustermann@example.de mobile_numbers: - area: '171' international_formatted: +49 171 1234567 national_formatted: 0171 1234567 number: '1234567' original: +49 171 1234567 section_work: addresses: - addition: 2. OG city: Hamburg country: DE house_number: '7' street: Industriepark zip_code: '20457' emails: - m.mustermann@beispiel-gmbh.de fax_numbers: - area: '40' number: '5550123499' original: +49 40 55501234-99 phone_numbers: - area: '40' international_formatted: +49 40 55501234-0 national_formatted: 040 55501234-0 number: '555012340' original: +49 40 55501234-0 tags: - premiumkunde - newsletter website: https://www.beispiel-gmbh.de contact_id: K-2025-00012345 event_id: 2ad40cba-3d5f-4bb9-a123-997f620dee87 event_time: '2025-04-25T12:48:03Z' type: update - contact_id: K-2025-00012345 event_documentation_url: >- https://cdn.example.com/docs/contacts/2ad40cba-3d5f-4bb9-a123-997f620dee87.pdf event_id: 2ad40cba-3d5f-4bb9-a123-997f620dee87 event_time: '2025-04-25T12:48:03Z' type: documentation - contact: birthday: '1992-03-08' company: Demo AG data: bevorzugtes_kontaktfenster: 08:00-16:00 CET crm_lead_score: '78' documentation: consents: - granted: true granted_agent: Edge/122.0 granted_at: '2024-11-05T14:17:09Z' granted_ip: 198.51.100.77 id: cnt_adv_002 type: advertisement first_name: Maximilian id: K-2025-00067890 language: de last_name: Mustermann nationality: DE position: Projektmanager salutation: Herr section_private: addresses: - city: Köln country: DE house_number: '25' street: Hauptstraße zip_code: '50667' emails: - maximilian.mustermann@example.de mobile_numbers: - area: '172' international_formatted: +49 172 6543210 national_formatted: 0172 6543210 number: '6543210' original: +49 172 6543210 section_work: addresses: - addition: 3. OG city: Düsseldorf country: DE house_number: '9' street: Technopark zip_code: '40219' emails: - mustermann.m@demo-ag.de fax_numbers: - area: '211' number: '98765499' original: +49 211 987654-99 phone_numbers: - area: '211' international_formatted: +49 211 987654-0 national_formatted: 0211 987654-0 number: '9876540' original: +49 211 987654-0 tags: - neukunde - webinar-teilnehmer website: https://www.demo-ag.de contact_id: K-2025-00067890 event_id: b7f509f3-e805-4743-b9a6-efa9e651e543 event_time: '2025-04-25T13:05:41Z' type: confirm '400': description: Bad Request schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /events/latest: get: security: - ApiKeyAuth: [] description: >- Get only latest Contact updates that have not yet been received via any API endpoint produces: - application/json tags: - Events summary: Get latest events operationId: GetLatestEvents parameters: - enum: - confirm - update - documentation type: string description: filter events by one or more types name: type in: query - type: string default: '1000' description: number of events per request name: limit in: query responses: '200': description: OK schema: type: array items: $ref: '#/definitions/ContactEvent' headers: Request-Id: type: string description: Id that identifies the request '400': description: Bad Request schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /events/trigger: post: security: - ApiKeyAuth: [] description: >- Triggers new update or confirm event and creates a static generic documentation of the consents consumes: - application/json produces: - application/json tags: - Events summary: Trigger sandbox event operationId: TriggerSandboxEvent parameters: - description: payload name: request in: body required: true schema: $ref: '#/definitions/TriggerPublicEvent' responses: '200': description: event was triggered successfully schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '400': description: some values of request body can not be parsed schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '403': description: sandbox events aren't accessible for production companies schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '404': description: specified contact not found schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /operations: get: security: - ApiKeyAuth: [] description: >- Returns a list of Operations. The Operations returned are sorted by creation date descending. tags: - Operations summary: List Operations operationId: GetAllOperations parameters: - type: string x-example: '2024-09-17T09:19:04Z' description: updates made From the date in a ISO 8601 format name: from in: query - type: string x-example: '2024-10-17T14:50:00Z' description: updates made To the date in a ISO 8601 format name: to in: query - type: string default: '1000' description: number of events per page name: limit in: query - type: string x-example: MDAwMDAwMDAtMDAwMC0 description: pagination cursor to next page name: cursor in: query responses: '200': description: OK schema: type: array items: $ref: '#/definitions/Operation' headers: Next-Cursor: type: string description: >- cursor value to be used for requesting next page when next page exists Next-Link: type: string description: >- link to request next page with built-in cursor parameter when next page exists Request-Id: type: string description: Id that identifies the request '403': description: Forbidden schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /operations/{id}: get: security: - ApiKeyAuth: [] description: Returns a single Operation. tags: - Operations summary: Get a specific Operation operationId: GetOperation parameters: - type: string description: the id of the operation name: id in: path required: true responses: '200': description: OK schema: $ref: '#/definitions/Operation' headers: Request-Id: type: string description: Id that identifies the request '403': description: Forbidden schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '404': description: Not Found schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request '500': description: Internal Server Error schema: $ref: '#/definitions/web.Response' headers: Request-Id: type: string description: Id that identifies the request x-group: - public /ping: get: description: >- Check if the Complero API is reachable from your network.
This is the only endpoint that does not need any API key to be accessed. summary: Ping Complero operationId: Ping responses: '200': description: OK '500': description: Internal Server Error x-codeSamples: - lang: cURL source: curl https://api.complero.com/v1/ping x-group: - public definitions: Address: type: object properties: addition: type: string city: type: string country: type: string district: type: string extra_1: type: string extra_2: type: string extra_3: type: string house_number: type: string street: type: string zip_code: type: string Consent: type: object properties: granted: type: boolean granted_agent: type: string granted_at: type: string granted_ip: type: string id: type: string type: type: string Contact: type: object properties: birthday: type: string company: type: string data: type: object additionalProperties: type: string degree: type: string documentation: $ref: '#/definitions/Documentation' employee_id: type: string first_name: type: string id: type: string language: type: string last_name: type: string name_suffix: type: string nationality: type: string position: type: string salutation: type: string section_private: $ref: '#/definitions/ContactSection' section_work: $ref: '#/definitions/ContactSection' tags: type: array items: type: string title: type: string website: type: string ContactEvent: type: object properties: contact: $ref: '#/definitions/Contact' contact_id: type: string event_documentation_url: type: string format: uri event_id: type: string event_time: type: string type: type: string enum: - update - confirm - documentation ContactSection: type: object properties: addresses: type: array items: $ref: '#/definitions/Address' emails: type: array items: type: string fax_numbers: type: array items: $ref: '#/definitions/PublicFax' mobile_numbers: type: array items: $ref: '#/definitions/PublicNumber' phone_numbers: type: array items: $ref: '#/definitions/PublicNumber' ContactUpload: type: object required: - first_name - id - last_name properties: birthday: type: string company: type: string data: type: object additionalProperties: type: string degree: type: string documentation: $ref: '#/definitions/Documentation' employee_id: type: string first_name: type: string id: type: string language: type: string last_name: type: string name_suffix: type: string nationality: type: string position: type: string salutation: type: string section_private: $ref: '#/definitions/Section' section_work: $ref: '#/definitions/Section' title: type: string website: type: string Documentation: type: object properties: consents: type: array items: $ref: '#/definitions/Consent' Email: type: object properties: email: type: string Employee: type: object properties: city: type: string data: type: object additionalProperties: type: string department: type: string email: type: string fax_number: type: string first_name: type: string house_number: type: string id: type: string last_name: type: string phone_number: type: string position: type: string profile_picture_url: type: string street: type: string tags: type: array items: type: string website: type: string zip_code: type: string EmployeeUpload: type: object required: - email - first_name - id properties: city: type: string data: type: object additionalProperties: type: string department: type: string email: type: string fax_number: type: string first_name: type: string house_number: type: string id: type: string last_name: type: string phone_number: type: string position: type: string profile_picture_url: type: string street: type: string tags: type: array items: type: string website: type: string zip_code: type: string Fax: type: object properties: number: type: string Mobile: type: object properties: number: type: string Operation: type: object properties: created_at: type: string id: type: string items: type: array items: $ref: '#/definitions/OperationItem' model: type: string status: type: string type: type: string OperationItem: type: object properties: id: type: string model_id: type: string status: type: string Phone: type: object properties: number: type: string PublicFax: type: object properties: area: description: area code of number type: string number: description: local number that is not the area code type: string original: description: 'as entered by the user: number input field' type: string PublicNumber: type: object properties: area: description: area code of number type: string international_formatted: type: string national_formatted: type: string number: description: local number that is not the area code type: string original: description: 'as entered by the user: number input field' type: string Section: type: object properties: addresses: type: array items: $ref: '#/definitions/Address' emails: type: array items: $ref: '#/definitions/Email' fax_numbers: type: array items: $ref: '#/definitions/Fax' mobile_numbers: type: array items: $ref: '#/definitions/Mobile' phone_numbers: type: array items: $ref: '#/definitions/Phone' TriggerPublicEvent: type: object properties: contact: $ref: '#/definitions/Contact' type: type: string enum: - update - confirm web.PostResponse: type: object properties: message: type: string validation_errors: type: object additionalProperties: $ref: '#/definitions/web.ValidationErrors' web.Response: type: object properties: message: type: string web.ValidationError: type: object properties: code: type: string message: type: string web.ValidationErrors: type: object additionalProperties: $ref: '#/definitions/web.ValidationError' securityDefinitions: ApiKeyAuth: type: apiKey name: Authorization in: header tags: - description: >- Individuals employed by your entity. Adding employees is optional, but recommended for Companies with branch offices or when different groups of contacts are managed by separate agencies or Employees. If no employee is specified, all uploaded Contacts will be assigned to the default Employee. name: Employees - description: Consumers receiving Complero Update Requests. name: Contacts x-tagGroups: - name: General tags: - '' - Events - name: Models tags: - Contacts - Employees - Operations