{"openapi":"3.0.0","info":{"title":"DMARC Analyzer","description":"<p>Use this API to communicate directly with the DMARC Analyzer back-end systems.\n<p>Authenticate with the API in one of these ways:\n<ol>\n<li>Using a Personal Access Token.\nPersonal Access Tokens are linked to individual users.<br\/>\nYou can create this token yourself from within the application if you have permissions to do so.\n<li>Using a custom client ID and secret for your account.\nCustom clients are linked to customers as a whole.<br\/>\nThis authentication method is deprecated; no new custom clients are created but existing clients will continue working.\n<\/ol>","termsOfService":"https:\/\/dmarcanalyzer.com\/conditions\/","contact":{"email":"info@dmarcanalyzer.com"},"license":{"name":"EULA","url":"https:\/\/www.dmarcanalyzer.com\/end-user-license-agreement\/"},"version":"1.0"},"servers":[{"url":"https:\/\/api.dmarcanalyzer.com:443","description":"API"}],"paths":{"\/oauth\/personal-access-tokens":{"get":{"tags":["API"],"summary":"Get a list of personal access tokens","responses":{"200":{"description":"Personal access tokens","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/personal_access_token"}}}}},"401":{"description":"Unauthorized","content":{"application\/json":{"schema":{"type":"string"},"example":"Unauthorized route:passport.personal.tokens.index"}}}}},"post":{"tags":["API"],"summary":"Create a personal access token","parameters":[{"name":"name","in":"query","description":"Name of the token","schema":{"type":"string"}},{"name":"scopes[]","in":"query","description":"List of scopes","schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Personal access tokens","content":{"application\/json":{"schema":{"properties":{"accessToken":{"description":"The access token created","type":"string"},"token":{"description":"POST \/oauth\/personal-access-tokens","type":"object","allOf":[{"$ref":"#\/components\/schemas\/token"}]}},"type":"object"}}}},"401":{"description":"Unauthorized","content":{"application\/json":{"schema":{"type":"string"},"example":"Unauthorized route:passport.personal.tokens.store"}}}}}},"\/login\/tfa\/validate":{"post":{"tags":["Login"],"summary":"Validate the user using a two-factor authentication code","operationId":"App\\Http\\Controllers\\Auth\\TfaController::validateToken","parameters":[{"name":"code","in":"query","description":"Two-factor authentication code","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Two-factor authentication validation response","content":{"application\/json":{"schema":{"required":["result"],"properties":{"result":{"description":"Was the two-factor authentication code valid?","type":"bool","example":"true"}},"type":"object"}}}},"400":{"$ref":"#\/components\/responses\/400"},"401":{"$ref":"#\/components\/responses\/401"}}}},"\/customers\/{customer}\/aggregate\/domain":{"get":{"tags":["Aggregate"],"summary":"Get an aggregated overview of all aggregate DMARC data by domain","operationId":"App\\Http\\Controllers\\Customer\\AggregateController::domain","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/page"},{"$ref":"#\/components\/parameters\/filter[range]"},{"$ref":"#\/components\/parameters\/filter[period][start]"},{"$ref":"#\/components\/parameters\/filter[period][end]"},{"$ref":"#\/components\/parameters\/filter[domain]"},{"name":"filter[domain-search]","in":"query","description":"Search by domain","schema":{"type":"string"}},{"name":"filter[group]","in":"query","description":"ID number of domaingroup to filter results by","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Domain volume data","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of domain volume data","type":"array","items":{"required":["domain","compliance"],"type":"object","allOf":[{"$ref":"#\/components\/schemas\/OverviewTransformer"}]}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"500":{"$ref":"#\/components\/responses\/500"}}}},"\/customers\/{customer}\/aggregate\/generic":{"get":{"tags":["Aggregate"],"summary":"Get an aggregated overview of all aggregate DMARC data","operationId":"App\\Http\\Controllers\\Customer\\AggregateController::generic","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"group","in":"query","description":"Group the data based on the provided value. Possible groups are: host.group,host.ip.raw,hashes.detailed_domain,hashes.detailed_org,host.country,report.org","schema":{"type":"string"}},{"name":"include","in":"query","description":"Provide a CSV list of keys which should be provided in the output. Please only request the desired information. A 'dot notation' is also supported. Possible keys: total,aligned,source_group,example,forwarded,disposition,mindates,day (also refer to output section for full overview)","schema":{"type":"string"}},{"$ref":"#\/components\/parameters\/page"},{"$ref":"#\/components\/parameters\/filter[period][start]"},{"$ref":"#\/components\/parameters\/filter[period][end]"},{"$ref":"#\/components\/parameters\/filter[range]"}],"responses":{"200":{"description":"An aggregated overview of all aggregate DMARC data","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Provide a flexible overview of aggregate DMARC data","type":"array","items":{"type":"object","allOf":[{"$ref":"#\/components\/schemas\/AggregateGenericData"}]}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/aggregate\/status":{"get":{"tags":["Aggregate"],"summary":"Get generic status for aggegate reports","operationId":"App\\Http\\Controllers\\Customer\\AggregateController::status","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/page"},{"$ref":"#\/components\/parameters\/filter[domains]"},{"$ref":"#\/components\/parameters\/filter[range]"},{"$ref":"#\/components\/parameters\/filter[period][start]"},{"$ref":"#\/components\/parameters\/filter[period][end]"},{"$ref":"#\/components\/parameters\/filter[domain]"}],"responses":{"200":{"description":"List of domains","content":{"application\/json":{"schema":{"properties":{"data":{"$ref":"#\/components\/schemas\/AggregateStatus"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/dns\/manager":{"get":{"tags":["Delegation"],"summary":"Get a paginated list of delegation definitions for a customer","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionController::index","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"filter[range]","in":"query","description":"Number of items on a page","schema":{"type":"int"}},{"name":"filter[page]","in":"query","description":"Zero-based index of the page","schema":{"type":"int"}},{"name":"filter[search]","in":"query","description":"If specified, return only labels containing this text","schema":{"type":"string"}},{"name":"sort[direction]","in":"query","description":"Direction of sorting (always for label)","schema":{"type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"List of customer delegation definiations","content":{"application\/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/CustomerDelegationDefinition"}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"post":{"tags":["Delegation"],"summary":"Add a new SPF delegation definition","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionController::add","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"domain","in":"query","description":"Domain to add","required":true,"schema":{"type":"string"},"example":"example.test"}],"responses":{"200":{"description":"Customer delegation definition","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerDelegationDefinitionTransformed"}}}},"409":{"$ref":"#\/components\/responses\/400"},"403":{"$ref":"#\/components\/responses\/403"}}}},"\/customers\/{customer}\/dns\/manager\/{uuid}":{"get":{"tags":["Delegation"],"summary":"Get a specific delegation definition for a customer","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionController::viewDomain","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"domainUuid","in":"query","description":"UUID identifying the domain","schema":{"type":"uuid"}}],"responses":{"200":{"description":"A defined customer delegation definition","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerDelegationDefinitionDetails"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"put":{"tags":["Delegation"],"summary":"Update a delegation definition for a customer","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionController::updateSpf","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"domainUuid","in":"query","description":"UUID identifying the domain"},{"name":"terms","in":"query","description":"List of domaingroup ID's","required":true,"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/SpfTerm"}}},{"name":"policy","in":"query","description":"SPF fallback policy","required":false,"schema":{"type":"string","enum":["~","-"]},"example":"~"}],"responses":{"200":{"description":"An updated customer delegation definiations","content":{"application\/json":{"schema":{"properties":{"result":{"description":"Indicates whether the definition was succesfully updated","type":"boolean"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"delete":{"tags":["Delegation"],"summary":"Delete a delegation definition for a customer","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionController::delete","parameters":[{"name":"removeDomain","in":"query","description":"Confirm to remove the domain?","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Response","content":{"application\/json":{"schema":{"properties":{"definition_deleted":{"description":"Indicates whether the definition was succesfully deleted","type":"boolean"},"domain_deleted":{"description":"Indicates whether the domain was succesfully deleted from DNS delegator","type":"boolean"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/dns\/manager\/{uuid}\/labels":{"get":{"tags":["Delegation"],"summary":"Get a list of all SPF term label suggestions for a domain","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionController::labels","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"uuid","in":"path","description":"UUID identifying the domain"}],"responses":{"200":{"description":"List of customer delegation term labels","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/CustomerDelegationLabel"}}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/dns\/manager\/templates":{"get":{"tags":["Delegation"],"summary":"Get all delegation definition templates","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionTemplateController::index","parameters":[{"$ref":"#\/components\/parameters\/customer"}],"responses":{"200":{"description":"List of customer delegation definiations","content":{"application\/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/CustomerDelegationDefinitionTemplate"}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"post":{"tags":["Delegation"],"summary":"Create a new delegation definition template","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionTemplateController::add","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"name","in":"query","description":"Descriptive name of the template","required":true,"schema":{"type":"string","maxLength":255}},{"name":"type","in":"query","description":"Type of template","schema":{"type":"string","enum":["dmarc","spf"]}},{"name":"definition","in":"query","description":"Definition template, depending on type","required":true,"schema":{"type":"object"}}],"responses":{"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/dns\/manager\/templates\/{template}":{"get":{"tags":["Delegation"],"summary":"Get a delegation definition template","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionTemplateController::get","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"template","in":"path","description":"ID identifying the template","schema":{"type":"int"}}],"responses":{"200":{"description":"A delegation definition template","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerDelegationDefinitionTemplate"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"post":{"tags":["Delegation"],"summary":"Apply a single template to multiple domains","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionTemplateController::bulkApply","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"template","in":"path","description":"ID identifying the template","schema":{"type":"int"}},{"name":"definition_uuids[]","in":"query","description":"List of UUID's of delegation definitions","required":true,"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/uuid"}}}],"responses":{"200":{"description":"List of customer delegation definiations","content":{"application\/json":{"schema":{"properties":{"result":{"description":"Was the template applied to all delegation definitions?","type":"boolean"},"failures":{"description":"List of failed UUID's","type":"array","items":{"$ref":"#\/components\/schemas\/uuid"}}},"type":"object"}}}},"400":{"$ref":"#\/components\/responses\/400"},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"422":{"$ref":"#\/components\/responses\/422"}}},"delete":{"tags":["Delegation"],"summary":"Delete a delegation definition template","operationId":"App\\Http\\Controllers\\Customer\\CustomerDelegationDefinitionTemplateController::delete","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"template","in":"path","description":"ID identifying the template","schema":{"type":"int"}}],"responses":{"200":{"description":"List of customer delegation definiations","content":{"application\/json":{"schema":{"properties":{"result":{"description":"Was the template deleted?","type":"boolean"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/deployment\/notes":{"get":{"tags":["Deployment"],"summary":"Retrieve all deployment notes for a specific customer","operationId":"App\\Http\\Controllers\\Customer\\DeploymentNoteController::notes","parameters":[{"$ref":"#\/components\/parameters\/customer"}],"responses":{"200":{"description":"Deployment notes","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Return a list of the current notes already categorized for this customer","type":"array","items":{"properties":{"updates_count":{"description":"Number of updates for this note","type":"integer","minimum":1}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentTask"}]}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/deployment\/note\/{note}":{"get":{"tags":["Deployment"],"summary":"Retrieve a single deployment note for a specific customer","operationId":"App\\Http\\Controllers\\Customer\\DeploymentNoteController::getNote","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"note","in":"path","description":"Number uniquely identifying a deployment note","required":true,"schema":{"type":"integer","format":"int32","minimum":1}}],"responses":{"200":{"description":"Deployment note","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Get details for a specific note","properties":{"updates":{"description":"Get details for a specific note","type":"array","items":{"$ref":"#\/components\/schemas\/DeploymentTaskUpdate"}},"source":{"$ref":"#\/components\/schemas\/DeploymentSource"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentTask"}]}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/deployment\/sources":{"get":{"tags":["Deployment"],"summary":"Retrieve a page of deployment sources for a specific customer","operationId":"App\\Http\\Controllers\\Customer\\DeploymentSourceController::sources","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"archived","in":"query","description":"Get archived sources","schema":{"type":"boolean"}},{"name":"filter[status]","in":"query","description":"Get only sources with this status","schema":{"type":"string"}},{"name":"filter[cursor]","in":"query","description":"Specify the cursor (from returned metadata of previous call) for the page of sources to retrieve","schema":{"type":"string"}}],"responses":{"200":{"description":"List of deployment sources","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Return a list of the current sources already categorized for this customer","type":"array","items":{"properties":{"tasks_count":{"description":"Number of tasks for the source","type":"integer","minimum":1},"notes_count":{"description":"Number of notes for the source","type":"integer","minimum":1}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentSource"}]}},"meta":{"$ref":"#\/components\/schemas\/meta-cursor"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/deployment\/source\/{source}":{"get":{"tags":["Deployment"],"summary":"Retrieve a specific deployment source","operationId":"App\\Http\\Controllers\\Customer\\DeploymentSourceController::getSource","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"source","in":"path","description":"Number uniquely identifying a source","required":true,"schema":{"$ref":"#\/components\/schemas\/deploymentsourceid"}}],"responses":{"200":{"description":"List of deployment sources","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Get details for a specific source","properties":{"tasks":{"description":"Get details for a specific source","type":"array","items":{"properties":{"user":{"$ref":"#\/components\/schemas\/CustomerUser"},"updates":{"description":"Get details for a specific source","type":"array","items":{"$ref":"#\/components\/schemas\/DeploymentTaskUpdate"}}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentTask"}]}},"notes":{"description":"Get details for a specific source","type":"array","items":{"properties":{"updates":{"description":"Get details for a specific source","type":"array","items":{"$ref":"#\/components\/schemas\/DeploymentTaskUpdate"}}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentTask"}]}}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentSource"}]}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/deployment\/tasks":{"get":{"tags":["Deployment"],"summary":"Retrieve a page of deployment tasks for a specific customer","operationId":"App\\Http\\Controllers\\Customer\\DeploymentTaskController::tasks","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"archived","in":"query","description":"Get archived tasks","schema":{"type":"boolean"}},{"name":"filter[status]","in":"query","description":"Get only tasks with this status","schema":{"type":"string"}},{"name":"filter[taskid]","in":"query","description":"Get only this specific task","schema":{"type":"string"}},{"name":"filter[cursor]","in":"query","description":"Specify the cursor (from returned metadata of previous call) for the page of tasks to retrieve","schema":{"type":"string"}}],"responses":{"200":{"description":"List of deployment tasks","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Return a list of the current tasks already categorized for this customer","type":"array","items":{"properties":{"updates_count":{"description":"Number of updates for this task","type":"integer","minimum":1},"source":{"$ref":"#\/components\/schemas\/DeploymentSource"},"user":{"$ref":"#\/components\/schemas\/CustomerUser"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentTask"}]}},"meta":{"$ref":"#\/components\/schemas\/meta-cursor"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/deployment\/task\/{task}":{"get":{"tags":["Deployment"],"summary":"Retrieve a specific deployment task","operationId":"App\\Http\\Controllers\\Customer\\DeploymentTaskController::getTask","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"task","in":"path","description":"Number uniquely identifying a task","required":true,"schema":{"$ref":"#\/components\/schemas\/deploymenttaskid"}}],"responses":{"200":{"description":"Deployment tasks","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Get details for a specific task","properties":{"source":{"$ref":"#\/components\/schemas\/DeploymentSource"},"updates":{"description":"Get details for a specific task","type":"array","items":{"properties":{"user":{"$ref":"#\/components\/schemas\/CustomerUser"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentTaskUpdate"}]}},"user":{"$ref":"#\/components\/schemas\/CustomerUser"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DeploymentTask"}]}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/deployment\/users":{"get":{"tags":["Deployment"],"summary":"Retrieve all deployment users for a specific customer","operationId":"App\\Http\\Controllers\\Customer\\DeploymentUserController::users","parameters":[{"$ref":"#\/components\/parameters\/customer"}],"responses":{"200":{"description":"Deployment users","content":{"application\/json":{"schema":{"properties":{"data":{"description":"Return a list of the current notes already categorized for this customer","type":"array","items":{"$ref":"#\/components\/schemas\/DeploymentUserTransformed"}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domains":{"get":{"tags":["Domains"],"summary":"Get a list of domains for the current customer","operationId":"App\\Http\\Controllers\\Customer\\DomainController::index","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/filter[domain]"}],"responses":{"200":{"description":"List of domains","content":{"application\/json":{"schema":{"type":"array","items":{"description":"Domain","type":"string","example":"example.com"}}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"post":{"tags":["Domains"],"summary":"Add a list of domains to the current customer account","operationId":"App\\Http\\Controllers\\Customer\\DomainController::add","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"newDomains","in":"query","description":"List of new domains to add","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["result"],"properties":{"result":{"description":"Were the domains succesfully added to the customer?","type":"boolean","example":true}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/users\/{user}\/domains\/{domain}":{"delete":{"tags":["Domains"],"summary":"Delete a domain from a customer account, if user did not receive data within x hours","operationId":"App\\Http\\Controllers\\Customer\\DomainController::delete","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"},{"$ref":"#\/components\/parameters\/domain"}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["result","message"],"properties":{"result":{"description":"Was the domain succesfully deleted from the customer's account?","type":"boolean","example":true},"message":{"description":"Error message detailing why a domain could not be deleted from the customer's account","type":"string","example":"domain_still_pointing"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/users\/{user}\/domains\/overview":{"get":{"tags":["Domains"],"summary":"Get the dashboard data","operationId":"App\\Http\\Controllers\\Customer\\DomainController::overview","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"},{"$ref":"#\/components\/parameters\/page"},{"$ref":"#\/components\/parameters\/filter[range]"},{"$ref":"#\/components\/parameters\/filter[period][start]"},{"$ref":"#\/components\/parameters\/filter[period][end]"},{"$ref":"#\/components\/parameters\/filter[domain]"},{"$ref":"#\/components\/parameters\/filter[empty]"},{"name":"filter[domain-search]","in":"query","description":"Search by domain","schema":{"type":"string"}},{"name":"filter[group]","in":"query","description":"ID number of domaingroup to filter results by","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Dashboard data","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of domain dashboard data","type":"array","items":{"required":["domain","compliance"],"type":"object","allOf":[{"$ref":"#\/components\/schemas\/DashboardDomainTransformer"}]}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"500":{"$ref":"#\/components\/responses\/500"}}}},"\/customers\/{customer}\/users\/{user}\/domains\/overview\/top\/":{"get":{"tags":["Domains"],"summary":"Get the dashboard data for the top X domains","operationId":"App\\Http\\Controllers\\Customer\\DomainController::top","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"},{"$ref":"#\/components\/parameters\/filter[range]"},{"$ref":"#\/components\/parameters\/filter[period][start]"},{"$ref":"#\/components\/parameters\/filter[period][end]"}],"responses":{"200":{"description":"Dashboard data","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of domain dashboard data for top domains","type":"array","items":{"required":["domain","compliance"],"type":"object","allOf":[{"$ref":"#\/components\/schemas\/OverviewTransformer"}]}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"500":{"$ref":"#\/components\/responses\/500"}}}},"\/customers\/{customer}\/domains\/status":{"get":{"tags":["Domains"],"summary":"Retrieve the status of a customer's domains","operationId":"App\\Http\\Controllers\\Customer\\DomainController::status","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/filter[domains]"}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["issues"],"properties":{"issues":{"description":"Are there any issues with the customer's domains?","type":"boolean","example":false},"<domain>":{"description":"**Only if filter[domains] set**; List of DNS record types within this domain with issues","properties":{"dkim":{"description":"Marker for a DKIM record with an issue. Value is always `dkim`","type":"string","enum":["dkim"],"example":"dkim"},"dmarc":{"description":"Marker for a DMARC record with an issue. Value is always `dmarc`","type":"string","enum":["dmarc"],"example":"dmarc"},"spf":{"description":"Marker for an SPF record with an issue. Value is always `spf`","type":"string","enum":["spf"],"example":"spf"}},"type":"object"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"500":{"$ref":"#\/components\/responses\/500"}}}},"\/customers\/{customer}\/domains\/breadcrumbs":{"get":{"tags":["Domains"],"summary":"Retrieve the onboarding breadcrumbs","operationId":"App\\Http\\Controllers\\Customer\\DomainController::breadcrumbs","parameters":[{"$ref":"#\/components\/parameters\/customer"}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["counts","step"],"properties":{"counts":{"description":"Determine the breadcrumb status of the customer.","required":["total","policy","status"],"properties":{"total":{"description":"Total number of domains","type":"integer","minimum":0,"example":7},"policy":{"description":"Determine the breadcrumb status of the customer.","required":["none","quarantine","reject","invalid","missing"],"properties":{"none":{"description":"Total number of domains with a `none` policy","type":"integer","minimum":0,"example":0},"quarantine":{"description":"Total number of domains with a `quarantine` policy","type":"integer","minimum":0,"example":2},"reject":{"description":"Total number of domains with a `reject` policy","type":"integer","minimum":0,"example":4},"invalid":{"description":"Total number of domains without a valid policy","type":"integer","minimum":0,"example":1},"missing":{"description":"Total number of domains without any policy","type":"integer","minimum":0,"example":0}},"type":"object"},"status":{"description":"Determine the breadcrumb status of the customer.","required":["onboarding","governance","policy_analysis","policy_enforcement","active_monitoring"],"properties":{"onboarding":{"description":"Total number of domains with a `none` policy","type":"integer","minimum":0,"example":0},"governance":{"description":"Total number of domains with a `governance` policy","type":"integer","minimum":0,"example":2},"policy_analysis":{"description":"Total number of domains with a `policy_analysis` policy","type":"integer","minimum":0,"example":4},"policy_enforcement":{"description":"Total number of domains with a `reject` policy_enforcement","type":"integer","minimum":0,"example":4},"active_monitoring":{"description":"Total number of domains with a `active_monitoring` policy","type":"integer","minimum":0,"example":4}},"type":"object"}},"type":"object"},"step":{"description":"Current step in onboarding process","type":"string","enum":["onboarding","governance","policy_analysis","policy_enforcement","active_monitoring"],"example":"governance"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domains\/{domain}":{"delete":{"tags":["Domains"],"summary":"Delete a domain from a customer account","operationId":"App\\Http\\Controllers\\Customer\\DomainController::deleteCustomerDomain","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"domain","in":"path","description":"Domain ID","required":true,"schema":{"type":"string"}},{"name":"remove_data","in":"query","description":"Remove recieved aggregate and forensic report data associated with the domain.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["result","message"],"properties":{"result":{"description":"Was the domain succesfully deleted from the customer's account?","type":"boolean","example":true},"message":{"description":"Error message detailing why a domain could not be deleted from the customer's account","type":"string","example":"domain_still_pointing"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domains\/list":{"get":{"tags":["Domains"],"summary":"Retrieve a customer's domains","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/filter[range]"},{"name":"filter[status]","in":"query","description":"Search by domain status (onboarding, governance, policy_analysis, policy_enforcement, active_monitoring)","schema":{"type":"string"}},{"name":"filter[group]","in":"query","description":"ID number of domaingroup to filter results by","schema":{"type":"integer","minimum":1}},{"name":"filter[domain-search]","in":"query","description":"Search by domain","schema":{"type":"string"}}],"responses":{"200":{"description":"Domains","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of domains","type":"array","items":{"$ref":"#\/components\/schemas\/Domain"}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"401":{"$ref":"#\/components\/responses\/401"},"500":{"$ref":"#\/components\/responses\/500"}}}},"\/customers\/{customer}\/domains\/refresh":{"post":{"tags":["Domains"],"summary":"Delete a domain from a customer account","operationId":"App\\Http\\Controllers\\Customer\\DomainController::refreshCustomerDomain","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"domain","in":"path","description":"Domain ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["result","message"],"properties":{"result":{"description":"Was the domain succesfully refreshed?","type":"boolean","example":true}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domaingroup":{"get":{"tags":["DomainGroup"],"summary":"Get a list of domaingroups","operationId":"App\\Http\\Controllers\\Customer\\DomainGroupController::index","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/filter[domain]"},{"name":"filter[name]","in":"query","description":"(Part of) domaingroup name to filter results by","schema":{"type":"string"}}],"responses":{"200":{"description":"Domaingroups","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of domain groups","type":"array","items":{"$ref":"#\/components\/schemas\/DomainGroup"}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"post":{"tags":["DomainGroup"],"summary":"Create a new domaingroup","operationId":"App\\Http\\Controllers\\Customer\\DomainGroupController::create","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"name","in":"query","description":"Name of the domaingroup","schema":{"type":"string","maxLength":150}},{"name":"domain_patterns","in":"query","description":"List of patterns matching domains in this group","schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/domain_pattern"}}},{"name":"exclude_domain_patterns","in":"query","description":"List of patterns to exclude from this group","schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/domain_pattern"}}},{"name":"activity","in":"query","description":"Filter in only domains of this activity type","schema":{"type":"string"}}],"responses":{"200":{"description":"Domaingroup","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/DomainGroup"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domaingroup\/{domaingroup}":{"get":{"tags":["DomainGroup"],"summary":"Get a specific domaingroup","operationId":"App\\Http\\Controllers\\Customer\\DomainGroupController::get","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/domaingroup"}],"responses":{"200":{"description":"Domaingroup","content":{"application\/json":{"schema":{"properties":{"data":{"$ref":"#\/components\/schemas\/DomainGroup"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"put":{"tags":["DomainGroup"],"summary":"Update an existing domaingroup","operationId":"App\\Http\\Controllers\\Customer\\DomainGroupController::update","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/domaingroup"},{"name":"name","in":"query","description":"Name of the domaingroup","schema":{"type":"string","maxLength":150}},{"name":"domain_patterns","in":"query","description":"List of patterns matching domains in this group","schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/domain_pattern"}}},{"name":"exclude_domain_patterns","in":"query","description":"List of patterns to exclude from this group","schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/domain_pattern"}}},{"name":"activity","in":"query","description":"Filter in only domains of this activity type","schema":{"type":"string","items":{"$ref":"#\/components\/schemas\/activity"}}}],"responses":{"200":{"description":"Domaingroup","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/DomainGroup"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"delete":{"tags":["DomainGroup"],"summary":"Delete a domaingroup","operationId":"App\\Http\\Controllers\\Customer\\DomainGroupController::delete","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/domaingroup"}],"responses":{"200":{"description":"Delete confirmation","content":{"application\/json":{"schema":{"properties":{"deleted":{"description":"Delete a domaingroup","type":"boolean"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/user\/{user}\/domaingroups":{"get":{"tags":["DomainGroup"],"summary":"Get the domaingroups a user has access to","operationId":"App\\Http\\Controllers\\Customer\\DomainGroupController::getPermissions","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"},{"name":"filter[name]","in":"query","description":"(Part of) domaingroup name to filter results by","schema":{"type":"string"}}],"responses":{"200":{"description":"List of domaingroups the user has access to","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"Get the domain groups a user has access to","type":"array","items":{"required":["id","name"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"name":{"description":"Name of the domaingroup","type":"string","maxLength":150,"example":"My group of domains"}},"type":"object"}},"allDomaingroups":{"description":"Indicates whether the user has access to all domaingroups","type":"boolean"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/user\/{user}\/domaingroup":{"put":{"tags":["DomainGroup"],"summary":"Set the domaingroups a user has access to","operationId":"App\\Http\\Controllers\\Customer\\DomainGroupController::setPermissions","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"},{"name":"domaingroups","in":"query","description":"List of domaingroup ID's","schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/id"}}}],"responses":{"200":{"description":"List of domaingroups the user has access to","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"Set the domain groups a use has access to","type":"array","items":{"required":["id","name"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"name":{"description":"Name of the domaingroup","type":"string","maxLength":150,"example":"My group of domains"}},"type":"object"}},"allDomaingroups":{"description":"Indicates whether the user has access to all domaingroups","type":"boolean"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domains\/issues\/":{"get":{"tags":["Issues"],"summary":"Get a list of domain issues","operationId":"App\\Http\\Controllers\\Customer\\DomainIssuesController::issues","parameters":[{"$ref":"#\/components\/parameters\/customer"}],"responses":{"200":{"description":"Issues","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of domain issues","type":"array","items":{"$ref":"#\/components\/schemas\/DomainIssuesModel"}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domains\/issues\/{issue}":{"delete":{"tags":["Issues"],"summary":"Delete a domain issue","operationId":"App\\Http\\Controllers\\Customer\\DomainIssuesController::deleteIssue","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"issue","in":"path","description":"Issue identifer","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Delete confirmation","content":{"application\/json":{"schema":{"properties":{"deleted":{"type":"boolean"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/forensic\/":{"get":{"tags":["Forensic"],"summary":"Get a list of forensic reports.","description":"When `key` IS NOT provided, only the `aggregations` part of results is returned. When `key` IS provided, only the `results` part is returned.","operationId":"App\\Http\\Controllers\\Customer\\ForensicController::subject","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/page"},{"$ref":"#\/components\/parameters\/filter[domains]"},{"$ref":"#\/components\/parameters\/filter[range]"},{"$ref":"#\/components\/parameters\/filter[period][start]"},{"$ref":"#\/components\/parameters\/filter[period][end]"},{"$ref":"#\/components\/parameters\/filter[domain]"},{"name":"key","in":"query","description":"Hash to provide as a 'key' to filter out specific results for this group.","schema":{"type":"string"}}],"responses":{"200":{"description":"List of forensic reports","content":{"application\/json":{"schema":{"properties":{"results":{"description":"Get forensic reports","type":"array","items":{"$ref":"#\/components\/schemas\/ForensicDetail"}},"aggregations":{"description":"Get forensic reports","properties":{"subjects":{"description":"Get forensic reports","type":"array","items":{"$ref":"#\/components\/schemas\/ForensicAggregation"}}},"type":"object"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domains\/timeline":{"get":{"tags":["Domains"],"summary":"Retrieve the items on the customer timeline","operationId":"App\\Http\\Controllers\\Customer\\TimelineController::timeline","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/filter[period][start]"},{"$ref":"#\/components\/parameters\/filter[period][end]"}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of timeline details","properties":{"<date>":{"description":"Retrieve the items on the customer timeline.","type":"array","items":{"description":"List of timeline events. Key is date of event in date format `YYYY-MM-DD`, i.e. `2017-12-31`","required":["domain","type"],"properties":{"domain":{"description":"Domain","type":"string","example":"example.com"},"type":{"description":"Type of timeline event","type":"string","example":"first_report"},"valid":{"description":"Is this domain selector valid?","type":"boolean","example":true},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"data":{"description":"JSON structure of data associated with this event","type":"object"},"firstdate":{"$ref":"#\/components\/schemas\/datetime"},"lastdate":{"$ref":"#\/components\/schemas\/datetime"}},"type":"object"}}},"type":"object"},"meta":{"$ref":"#\/components\/schemas\/meta-cursor"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/domains\/timeline\/{id}":{"get":{"tags":["Domains"],"summary":"Retrieve the items on the customer timeline","operationId":"App\\Http\\Controllers\\Customer\\TimelineController::timelineDetail","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"id","in":"path","description":"Unique number identifying a specific timeline event","required":true,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["id","domain","customerid"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"domain":{"description":"Domain","type":"string","example":"example.com"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"firstdate":{"$ref":"#\/components\/schemas\/datetime"},"lastdate":{"$ref":"#\/components\/schemas\/datetime"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/unconfirmed-domains":{"get":{"tags":["Domains"],"summary":"Get a list of domains which are not yet confirmed as known domains.","operationId":"App\\Http\\Controllers\\Customer\\UnconfirmedDomainController::index","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"filter[action]","in":"query","description":"Filter domains with a specific action (accept\/reject), default returns all domains without a registered action","schema":{"type":"string"}}],"responses":{"200":{"description":"List of domains","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/UnconfirmedDomainTransformed"}}}}},"401":{"$ref":"#\/components\/responses\/401"}}}},"\/customers\/{customer}\/users\/{user}":{"get":{"tags":["Users"],"summary":"Get a specific user","operationId":"App\\Http\\Controllers\\Customer\\UserController::get","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"}],"responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerUserGet"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}},"put":{"tags":["Users"],"summary":"Update a user","operationId":"App\\Http\\Controllers\\Customer\\UserController::edit","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"},{"name":"email","in":"query","description":"The email address of the new user. Updating your own email address is not possible.","required":true,"schema":{"type":"string"}},{"name":"firstname","in":"query","description":"The firstname of the user","required":true,"schema":{"type":"string"}},{"name":"lastname","in":"query","description":"The lastname of the user","required":true,"schema":{"type":"string"}},{"name":"password","in":"query","description":"The password for the new user. Leave empty to skip update.","required":false,"schema":{"type":"string"}},{"name":"password_confirmation","in":"query","description":"The password confirmation","required":false,"schema":{"type":"string"}},{"name":"locale","in":"query","description":"The locale of the new user","required":true,"schema":{"type":"string","enum":["de","en","es","fr","nl","pt"]}},{"name":"timezone","in":"query","description":"The timezone of the user, identified by a timezoneid","required":true,"schema":{"type":"integer","maximum":82,"minimum":1}},{"name":"default_period_from","in":"query","description":"The default 'from' period for this user. This should be a valid date interval (ie. P3M)","required":true,"schema":{"type":"string"}},{"name":"default_period_to","in":"query","description":"The default 'to' period for this user. This should be a valid date interval (ie. P3M)","required":true,"schema":{"type":"string"}},{"name":"date_format","in":"query","description":"The default date format for this user.","required":true,"schema":{"type":"string","enum":["en","iso","nl"]}},{"name":"number_format","in":"query","description":"The default number format for this user.","schema":{"type":"string","enum":["en","nl"]}},{"name":"is_super_user","in":"query","description":"Is the user a superuser?","schema":{"type":"boolean"}},{"name":"domains[]","in":"query","description":"An array of domains the user is allowed to see. This only applies if the user is not a super user","schema":{"type":"string","collectionFormat":"multi"}},{"name":"section_groups[]","in":"query","description":"An array of sections the user is allowed to have access to. This only applies if the user is not a super user","schema":{"type":"string","collectionFormat":"multi"}}],"responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerUser"}}}},"401":{"$ref":"#\/components\/responses\/401"},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"422":{"$ref":"#\/components\/responses\/422"}}},"delete":{"tags":["Users"],"summary":"Delete a user","operationId":"App\\Http\\Controllers\\Customer\\UserController::delete","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"$ref":"#\/components\/parameters\/user"}],"responses":{"200":{"description":"Delete confirmation","content":{"application\/json":{"schema":{"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/customers\/{customer}\/users":{"get":{"tags":["Users"],"summary":"Get a list of users","operationId":"App\\Http\\Controllers\\Customer\\UserController::index","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"filter[isTfaEnabled]","in":"query","description":"Does the user have two factor authentication enabled?","schema":{"type":"integer","maximum":1,"minimum":0}},{"name":"filter[isSuperUser]","in":"query","description":"Is the user a superuser?","schema":{"type":"boolean"}},{"name":"filter[email]","in":"query","description":"(Part of) the email address to filter results by","schema":{"type":"string"}},{"name":"filter[firstname]","in":"query","description":"(Part of) users firstname to filter results by","schema":{"type":"string"}},{"name":"filter[lastname]","in":"query","description":"(Part of) users lastname to filter results by","schema":{"type":"string"}}],"responses":{"200":{"description":"Users","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"List of users","type":"array","items":{"$ref":"#\/components\/schemas\/CustomerUserTransformed"}},"meta":{"$ref":"#\/components\/schemas\/meta-pagination"}},"type":"object"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/customers\/{customer}\/users\/":{"post":{"tags":["Users"],"summary":"Create a user","operationId":"App\\Http\\Controllers\\Customer\\UserController::create","parameters":[{"$ref":"#\/components\/parameters\/customer"},{"name":"email","in":"query","description":"The email address of the new user","required":true,"schema":{"type":"string"}},{"name":"firstname","in":"query","description":"The firstname of the user","required":true,"schema":{"type":"string"}},{"name":"lastname","in":"query","description":"The lastname of the user","required":true,"schema":{"type":"string"}},{"name":"password","in":"query","description":"The password for the new user","required":false,"schema":{"type":"string"}},{"name":"password_confirmation","in":"query","description":"The password confirmation","required":false,"schema":{"type":"string"}},{"name":"locale","in":"query","description":"The locale of the new user","required":true,"schema":{"type":"string","enum":["de","en","es","fr","nl","pt"]}},{"name":"timezone","in":"query","description":"The timezone of the user, identified by a timezoneid","required":false,"schema":{"type":"integer","maximum":82,"minimum":1}},{"name":"default_period_from","in":"query","description":"The default 'from' period for this user. This should be a valid date interval (ie. P3M)","required":false,"schema":{"type":"string"}},{"name":"default_period_to","in":"query","description":"The default 'to' period for this user. This should be a valid date interval (ie. P3M)","required":false,"schema":{"type":"string"}},{"name":"date_format","in":"query","description":"The default date format for this user.","required":false,"schema":{"type":"string","enum":["en","iso","nl"]}},{"name":"is_super_user","in":"query","description":"Is the user a superuser?","schema":{"type":"boolean"}},{"name":"domains[]","in":"query","description":"An array of domains the user is allowed to see. This only applies if the user is not a super user","schema":{"type":"string","collectionFormat":"multi"}},{"name":"section_groups[]","in":"query","description":"An array of sections the user is allowed to have access to. This only applies if the user is not a super user","schema":{"type":"string","collectionFormat":"multi"}},{"name":"access_level","in":"query","description":"The requested access level. Overwrites is_super_user, domains and section_groups if specified","required":false,"schema":{"type":"string","enum":["edit","read"]}},{"name":"confirm","in":"query","description":"Confirm the user?","schema":{"type":"boolean"}}],"responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CustomerUser"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/customers":[],"\/data\/timezones":{"get":{"tags":["Data"],"summary":"Get all available timezones","operationId":"App\\Http\\Controllers\\DataController::timezones","responses":{"200":{"description":"Timezones","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/Timezone"}}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/data\/countries":{"get":{"tags":["Data"],"summary":"Get all available countries","operationId":"App\\Http\\Controllers\\DataController::countries","responses":{"200":{"description":"Countries","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Countries"}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/data\/states\/{country}":{"get":{"tags":["Data"],"summary":"Get all available states in a specific country","operationId":"App\\Http\\Controllers\\DataController::states","parameters":[{"name":"country","in":"path","description":"2-letter country code (ISO 3166-1 alpha-2)","schema":{"type":"string","pattern":"[A-Z]{2}"}}],"responses":{"200":{"description":"List of states in the country specified","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/State"}}}}},"403":{"$ref":"#\/components\/responses\/403"},"404":{"$ref":"#\/components\/responses\/404"}}}},"\/data\/tax\/calculate":[],"\/data\/reseller":[],"\/data\/paymentmethods":[],"\/data\/paymentmethods\/{country}":[],"\/locale\/{code}\/translations":[],"\/domain\/validate\/dmarc":{"post":{"tags":["Domain"],"summary":"Validate the DMARC record of a domain","operationId":"App\\Http\\Controllers\\Domain\\ValidateController::validateDmarc","parameters":[{"name":"domain","in":"query","description":"Domainname you want to validate the DMARC record of","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Validation results","content":{"application\/json":{"schema":{"required":["domain","result","data"],"properties":{"domain":{"description":"The domainname specified when calling this operations","type":"string","example":"example.com"},"result":{"description":"Is the DMARC record valid?","type":"boolean"},"data":{"description":"Information about the record validation","properties":{"information":{"description":"The parsed DMARC record contents","required":["v","p"],"properties":{"v":{"description":"Version indicator","type":"string","example":"DMARC1"},"p":{"description":"Domain policy","type":"string","enum":["none","quarantine","reject"],"example":"reject"},"sp":{"description":"Subdomain policy","type":"string","enum":["none","quarantine","reject"],"example":"reject"},"rua":{"description":"URI to agregate report recipient","type":"string","example":"mailto:rua@example.com"},"ruf":{"description":"URI to forensic report recipient","type":"string","example":"mailto:ruf@example.com"},"rf":{"description":"Report format","type":"string","example":"afrf"},"pct":{"description":"Percentage of emails to apply policy to","type":"integer","maximum":100,"minimum":0,"example":50},"adkim":{"description":"Require domain to match DKIM record (`s`trict) or allow subdomains (`r`elaxed)","type":"string","enum":["r","s"],"example":50},"aspf":{"description":"Require domain to match SPF record (`s`trict) or allow subdomains (`r`elaxed)","type":"string","enum":["r","s"],"example":50},"fo":{"description":"Report if both alignments (`0`), either (`1`) or only `s`PF or `d`KIM fails","type":"string","enum":["0","1","d","s"],"example":"0"},"ri":{"description":"Requested reporting interval in seconds","type":"integer","minimum":1,"example":86400}},"type":"object"},"raw":{"description":"Original DMARC record","type":"string","example":"v=DMARC1; p=reject"},"problems":{"$ref":"#\/components\/schemas\/ValidationProblems"},"unknown":{"description":"Unrecognized tag:value pairs found in the DMARC record","type":"object","example":{"foo":"bar"},"additionalProperties":{"type":"string"}},"explicit":{"description":"Optional tag:value pairs found in the DMARC record","type":"object","example":{"pct":100},"additionalProperties":{"type":"string"}},"required":{"description":"Required tag:value pairs found in the DMARC record","type":"object","example":{"v":"DMARC1"},"additionalProperties":{"type":"string"}},"implicit":{"description":"Default-value tag:value pairs not found in the DMARC record","type":"object","example":{"adkim":"r"},"additionalProperties":{"type":"string"}}},"type":"object"}},"type":"object"}}}},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/domain\/validate\/spf":{"post":{"tags":["Domain"],"summary":"Validate the SPF record of a domain","operationId":"App\\Http\\Controllers\\Domain\\ValidateController::validateSpf","parameters":[{"name":"domain","in":"query","description":"Domainname you want to validate the SPF record of","required":true,"schema":{"type":"string"}},{"name":"spf","in":"query","description":"Optional SPF record content to validate against the domain instead of the current SPF record","schema":{"type":"string"}}],"responses":{"200":{"description":"Validation results","content":{"application\/json":{"schema":{"required":["domain","result","data"],"properties":{"domain":{"description":"The domainname specified when calling this operations","type":"string","example":"example.com"},"result":{"description":"Is the SPF record valid?","type":"boolean"},"data":{"description":"Information about the record validation","required":["records","embedded","uses_macro","problems"],"properties":{"records":{"description":"A list of parsed SPF records","type":"array","items":{"$ref":"#\/components\/schemas\/SpfValidationRecord"}},"embedded":{"description":"Tree view of the parsed SPF records","type":"array","items":{"$ref":"#\/components\/schemas\/SpfValidationRecord"}},"uses_macro":{"description":"Do any of the validated SPF records use macros?","type":"boolean","externalDocs":"http:\/\/www.openspf.org\/RFC_4408#macros","example":false},"problems":{"$ref":"#\/components\/schemas\/ValidationProblems"}},"type":"object"}},"type":"object"}}}},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/domain\/validate\/spf\/volume":{"post":{"tags":["Domain"],"summary":"Validate the SPF record of a domain","operationId":"App\\Http\\Controllers\\Domain\\ValidateController::validateSpfWithVolume","parameters":[{"name":"domain","in":"query","description":"Domainname you want to validate the SPF record of","required":true,"schema":{"type":"string"}},{"name":"spf","in":"query","description":"Optional SPF record content to validate against the domain instead of the current SPF record","schema":{"type":"string"}}],"responses":{"200":{"description":"Validation results","content":{"application\/json":{"schema":{"required":["domain","result","data"],"properties":{"domain":{"description":"The domainname specified when calling this operations","type":"string","example":"example.com"},"result":{"description":"Is the SPF record valid?","type":"boolean"},"data":{"description":"Information about the record validation","required":["records","embedded","uses_macro","problems","volume"],"properties":{"records":{"description":"A list of parsed SPF records","type":"array","items":{"$ref":"#\/components\/schemas\/SpfValidationRecord"}},"embedded":{"description":"Tree view of the parsed SPF records","type":"array","items":{"$ref":"#\/components\/schemas\/SpfValidationRecord"}},"uses_macro":{"description":"Do any of the validated SPF records use macros?","type":"boolean","externalDocs":"http:\/\/www.openspf.org\/RFC_4408#macros","example":false},"problems":{"$ref":"#\/components\/schemas\/ValidationProblems"},"volume":{"description":"Volume details of the IP addresses used in the SPF record","type":"array","items":{"$ref":"#\/components\/schemas\/SpfValidationVolumePart"}}},"type":"object"}},"type":"object"}}}},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/domain\/validate\/dkim":{"post":{"tags":["Domain"],"summary":"Validate the DKIM record for a selector of a domain","operationId":"App\\Http\\Controllers\\Domain\\ValidateController::validateDkim","parameters":[{"name":"domain","in":"query","description":"Domainname you want to validate the DKIM record of","required":true,"schema":{"type":"string"}},{"name":"selector","in":"query","description":"Specific DKIM selector you want to validate for the domain","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Validation results","content":{"application\/json":{"schema":{"required":["domain","result","data"],"properties":{"domain":{"description":"The domainname specified when calling this operations","type":"string","example":"example.com"},"result":{"description":"Is the SPF record valid?","type":"boolean"},"data":{"description":"Information about the record validation","required":["information","record","bits","problems","unknown","explicit","required","implicit","selector"],"properties":{"information":{"description":"Validate a domain on SPF dns record","required":["p"],"properties":{"v":{"description":"Version indicator","type":"string","example":"DKIM1"},"g":{"description":"Granularity of the key","type":"string","example":"*"},"h":{"description":"Acceptable hash algorithms","type":"string","example":"sha256"},"k":{"description":"Key type","type":"string","example":"rsa"},"n":{"description":"Human-readable notes","type":"string","example":"Anything you want"},"p":{"description":"Public-key data (base64 encoded)","type":"string","example":"reject"},"s":{"description":"Service type","type":"string","example":"*"},"t":{"description":"Flags","type":"string","enum":["y","s","y:s","s:y"],"example":"y:s"}},"type":"object"},"records":{"description":"The raw, unparsed DKIM record","type":"string"},"bits":{"description":"Key size in bits","type":"integer","maximum":4096,"minimum":512},"problems":{"$ref":"#\/components\/schemas\/ValidationProblems"},"unknown":{"description":"Unrecognized tag:value pairs found in the DKIM record","type":"object","example":{"foo":"bar"},"additionalProperties":{"type":"string"}},"explicit":{"description":"Optional tag:value pairs found in the DKIM record","type":"object","example":{"k":"rsa"},"additionalProperties":{"type":"string"}},"required":{"description":"Required tag:value pairs found in the DKIM record","type":"object","example":{"v":"DKIM1"},"additionalProperties":{"type":"string"}},"implicit":{"description":"Default-value tag:value pairs not found in the DKIM record","type":"object","example":{"g":0},"additionalProperties":{"type":"string"}},"selector":{"description":"The selector this DKIM record applies to","type":"string","example":"selector"}},"type":"object"}},"type":"object"}}}},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/domain\/validate\/bimi":{"post":{"tags":["Domain"],"summary":"Validate the BIMI record for a selector of a domain","operationId":"App\\Http\\Controllers\\Domain\\ValidateController::validateBimi","parameters":[{"name":"domain","in":"query","description":"Domain name you want to validate the BIMI record of","required":true,"schema":{"type":"string"}},{"name":"selector","in":"query","description":"Specific BIMI selector you want to validate for the domain","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Validation results","content":{"application\/json":{"schema":{"required":["domain","result","data"],"properties":{"domain":{"description":"The domainname specified for which to validate the BIMI record","type":"string","example":"example.com"},"selector":{"description":"The selector specified (typically 'default')","type":"string","example":"default"},"result":{"description":"Is the BIMI record valid?","type":"boolean"},"data":{"description":"Information about the record validation","required":["problems","svg_uri"],"properties":{"record":{"description":"The raw, unparsed BIMI record","type":"string"},"problems":{"$ref":"#\/components\/schemas\/ValidationProblems"},"svg_uri":{"description":"URI for SVG","type":"string","example":"https:\/\/brand.com\/logo.svg"},"svg_valid":{"description":"Is the SVG valid for displaying?","type":"bool","example":"true"}},"type":"object"}},"type":"object"}}}},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/":{"get":{"tags":["Index"],"summary":"Check API version","operationId":"App\\Http\\Controllers\\IndexController::index","responses":{"200":{"description":"The API version number","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Version"}}}}}}},"\/login\/access_token":{"post":{"tags":["Login"],"summary":"Get an access token for user authentication","operationId":"App\\Http\\Controllers\\LoginController::accessToken","parameters":[{"name":"client_id","in":"query","description":"Uniquely identifying name of the client application which requests access on behalf of the user","required":true,"schema":{"type":"string"}},{"name":"client_secret","in":"query","description":"Code known only to the client application and this API to provide authentication of the client application itself","required":true,"schema":{"type":"string"}},{"name":"grant_type","in":"query","description":"Indicates whether this is the initial authentication (`password`) or a refresh of the token after it expires (`refresh_token`)","required":true,"schema":{"type":"string","enum":["password","refresh_token"]}},{"name":"username","in":"query","description":"**grant_type=password**. A name uniquely identifying a specific user who the client application wants to act on behalf as","schema":{"type":"string"}},{"name":"password","in":"query","description":"**grant_type=password**. The password for the user identified by `username`","schema":{"type":"string"}},{"name":"refresh_token","in":"query","description":"**grant_type=refresh_token**. A refresh_token provided in a previous call to this API operation","schema":{"type":"string"}}],"responses":{"200":{"description":"Authenticated user result","content":{"application\/json":{"schema":{"required":["token_type","expires_in","access_token","refresh_token"],"properties":{"token_type":{"description":"The type of token used to authenticate future requests by the client application","type":"string","example":"Bearer"},"expires_in":{"description":"Number of seconds the token will remain authenticated","type":"integer","minimum":0,"example":3600},"access_token":{"description":"The authentication token used to authenticate future requests by the client application","type":"string","example":"eyJ0eXAiOiJK..."},"refresh_token":{"description":"A token which can be used to get a new authentication token quickly using this API call","type":"string","example":"def50200074d..."}},"type":"object"}}}},"400":{"$ref":"#\/components\/responses\/400"},"401":{"$ref":"#\/components\/responses\/401"}}}},"\/login\/resetpass":{"post":{"tags":["Login"],"summary":"Perform a token-verified password reset","operationId":"App\\Http\\Controllers\\LoginController::resetPassword","parameters":[{"name":"email","in":"query","description":"E-mail address of the user to reset the password for","required":true,"schema":{"type":"string","format":"email"}},{"name":"token","in":"query","description":"E-mail address of the user to reset the password for","required":true,"schema":{"type":"string","pattern":"[a-z0-9]+"}},{"name":"password","in":"query","description":"Change the user's password to this.","required":true,"schema":{"type":"string"}},{"name":"password_confirmation","in":"query","description":"**Must** be identical to `password`'s value.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"$ref":"#\/components\/responses\/200"},"400":{"$ref":"#\/components\/responses\/400"},"422":{"$ref":"#\/components\/responses\/422"}}}},"\/login\/drop":{"post":{"tags":["Login"],"summary":"Drop an access token (logout)","operationId":"App\\Http\\Controllers\\LoginController::dropToken","responses":{"200":{"$ref":"#\/components\/responses\/200"},"401":{"$ref":"#\/components\/responses\/401"}}}},"\/login\/user":{"get":{"tags":["Login"],"summary":"Get the currently authenticated user (you)","operationId":"App\\Http\\Controllers\\LoginController::current","responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"required":["data"],"properties":{"data":{"description":"Fetch the customers profile for this specific customer","properties":{"sections":{"description":"An array of the allowed sections for this user.","type":"object"},"two_factor_verified":{"description":"Has the TAF setup for this user been verified?","type":"boolean"},"subscription_data":{"description":"Some specifics on the possible subscription for this user.","type":"object"},"has_send_failures":{"description":"Did emails sent to this user fail permanently?","type":"boolean"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/CustomerUser"}]}},"type":"object"}}}},"400":{"$ref":"#\/components\/responses\/400"},"401":{"$ref":"#\/components\/responses\/401"}}}},"\/login\/sendresetpass":{"post":{"tags":["Login"],"summary":"Send an e-mail for a \"reset password\" request to the specified e-mail address.","operationId":"App\\Http\\Controllers\\LoginController::sendResetLinkEmail","parameters":[{"name":"email","in":"query","description":"E-mail address of the user to request a password reset for","required":true,"schema":{"type":"string","format":"email"}}],"responses":{"200":{"$ref":"#\/components\/responses\/200"}}}},"\/oauth\/scopes":{"get":{"tags":["API"],"summary":"Get a list of available OAuth scopes","responses":{"200":{"description":"Issues","content":{"application\/json":{"schema":{"type":"array","items":{"required":["id","description"],"properties":{"id":{"description":"Unique identifier for the scope","type":"string"},"description":{"description":"Descriptive text detailing what the scope entails","type":"string"}},"type":"object"}}}}},"401":{"description":"Unauthorized","content":{"application\/json":{"schema":{"type":"string"},"example":"Unauthorized route:passport.scopes.index"}}}}}},"\/oauth\/personal-access-tokens\/{token_id}":{"delete":{"tags":["API"],"summary":"Create a personal access token","parameters":[{"name":"token_id","in":"query","description":"Unique identifier for the token","schema":{"type":"string","maxLength":100}}],"responses":{"204":{"description":"Successfully deleted; no content"},"401":{"description":"Unauthorized","content":{"application\/json":{"schema":{"type":"string"},"example":"Unauthorized route:passport.personal.tokens.destroy"}}}}}}},"components":{"schemas":{"user":{"allOf":[{"$ref":"#\/components\/schemas\/id"},{"description":"Customer user","properties":{"id":{"$ref":"#\/components\/schemas\/id"},"email":{"$ref":"#\/components\/schemas\/email"},"firstname":{"description":"First name of the user","type":"string","maxLength":255},"lastname":{"description":"Last name of the user","type":"string","maxLength":255}},"type":"object"}]},"Customer":{"properties":{"customerid":{"$ref":"#\/components\/schemas\/customerid"},"uniqueid":{"description":"Unique id identifying the customer","type":"string","example":"60c37438b4"},"confirmed":{"$ref":"#\/components\/schemas\/datetime"},"trial_ends_at":{"$ref":"#\/components\/schemas\/datetime"},"subscription":{"description":"Active plan for the customer","properties":{"stripe_plan":{"description":"The name of the plan","type":"string","example":"custom"}},"type":"object"},"users":{"description":"Customer users","type":"array","items":{"type":"object","allOf":[{"$ref":"#\/components\/schemas\/user"}]}},"information":{"description":"Customer information","properties":{"company":{"description":"Class Customer","type":"string","example":"Old"}},"type":"object"},"features":{"description":"Customer features","type":"array","items":[]}},"type":"object"},"customerdelegationdefinitionid":{"allOf":[{"$ref":"#\/components\/schemas\/id"}]},"CustomerDelegationDefinition":{"required":["id","customerid","uuid","label"],"properties":{"id":{"$ref":"#\/components\/schemas\/customerdelegationdefinitionid"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"uuid":{"$ref":"#\/components\/schemas\/uuid"},"label":{"description":"Name of the definition. Typically the domain name.","type":"string","maxLength":255},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"}},"type":"object"},"CustomerDelegationDefinitionTemplate":{"required":["id","customerid","name","type","definition"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"name":{"description":"Descriptive name of the template","type":"string","maxLength":255},"type":{"description":"Type of template","type":"string","enum":["dmarc","spf"]},"definition":{"description":"Definition template, depending on type","type":"object"}},"type":"object"},"userid":{"description":"Unique number identifying a user","type":"integer","format":"int32","minimum":1,"example":1},"CustomerUser":{"required":["id","customerid","email","firstname","lastname","locale","reseller","subscription","retention","rights","is_super_user","tfa_status","lastlogin","created_at","volumeDetails","hasExceededVolumeLimit","defaultPeriod","defaultRange"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"email":{"$ref":"#\/components\/schemas\/email"},"firstname":{"description":"First name of the user","type":"string","maxLength":255},"lastname":{"description":"Last name of the user","type":"string","maxLength":255},"locale":{"description":"Locale code prescribing default date and number formatting (among others)","type":"string","enum":["de","en","es","fr","nl","pt"],"example":"en"},"number_format":{"description":"Locale to use for formatting numbers (if not configured locale)","type":"string","default":"","enum":["en","nl"]},"date_format":{"description":"Locale to use for formatting dates (if not configured locale)","type":"string","default":"","enum":["en","iso","nl"]},"timezone":{"description":"Name of the timezone set for the user","type":"string","maxLength":255},"confirmed":{"$ref":"#\/components\/schemas\/datetime"},"reseller":{"description":"Name of the reseller for this user","type":"string","maxLength":50,"example":"myreseller"},"refer":{"description":"Marketing channel leading to this user","type":"string","maxLength":50,"example":"google"},"subscription":{"description":"Name of the subscription for this user","type":"string","maxLength":255,"example":"Free"},"retention":{"$ref":"#\/components\/schemas\/dateinterval"},"is_super_user":{"description":"Is this user a super user?","type":"boolean","example":false},"rights":{"description":"Class CustomerUser","properties":{"domains":{"description":"List of domains","type":"array","items":{"description":"Organizational domain","type":"string","example":"example.com"}}},"type":"object"},"tfa_status":{"description":"Current status of Two-Factor Authentication enabling","type":"string","enum":["unverified","confirm","verified"],"example":"unverified"},"lastlogin":{"$ref":"#\/components\/schemas\/datetime"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"trial_ends_at":{"$ref":"#\/components\/schemas\/datetime"},"volumeDetails":{"description":"Volume details","required":["total","max","days","projected","exceeded","lockedout"],"properties":{"total":{"description":"Total registered DMARC compliant volume","type":"integer","minimum":0},"max":{"description":"The maximum allowed volume for this customer","type":"integer","minimum":0},"days":{"description":"The number of days we have registered volume at.","type":"integer","minimum":0},"projected":{"description":"The projected volume based on a 30 day period.","type":"integer","minimum":0},"exceeded":{"description":"Has the customer exceeded its allowed volume?","type":"boolean","example":false},"lockedout":{"description":"Is the customer locked out because of a volume limit?","type":"boolean","example":false}},"type":"object"},"hasExceededVolumeLimit":{"description":"Has this user's average volume exceeded his volume limit?","type":"boolean"},"defaultPeriod":{"$ref":"#\/components\/schemas\/period"},"defaultRange":{"description":"Class CustomerUser","type":"integer","minimum":0},"domainRestrictions":{"description":"Are the domains the user is allowed to see, restricted?","type":"boolean"},"pending_invitation":{"description":"Does the user have an open invitation into the application?","type":"boolean"}},"type":"object"},"CustomerUserInvite":{"allOf":[{"$ref":"#\/components\/schemas\/id"},{"required":["id","userid","token","created_at"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"userid":{"$ref":"#\/components\/schemas\/userid"},"token":{"description":"The token to redeem this invitation","type":"string"},"created_at":{"$ref":"#\/components\/schemas\/created_at"}},"type":"object"}]},"deploymentsourceid":{"allOf":[{"$ref":"#\/components\/schemas\/id"}]},"DeploymentSource":{"required":["id","customerid","forwarded","compliant","key_type","source_group","key","status","order"],"properties":{"id":{"$ref":"#\/components\/schemas\/deploymentsourceid"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"forwarded":{"description":"Is this source forwarded?","type":"boolean"},"compliant":{"description":"Is this source compliant?","type":"boolean"},"key_type":{"description":"Type of key for this deployment source","type":"string","enum":["ip","hostgroup","source","group"]},"source_group":{"description":"Name of the source group","type":"string","maxLength":255},"hostgroup":{"description":"Name of the host group, if available","type":"string","maxLength":255},"key":{"description":"Key for this deployment source","type":"string","maxLength":255},"status":{"description":"Status of the source","type":"string","enum":["compliant","notcompliant","failed","forwarded","underinvestigation"]},"order":{"description":"Sorting order of this task","type":"integer"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"deleted_at":{"$ref":"#\/components\/schemas\/deleted_at"}},"type":"object"},"deploymenttaskid":{"allOf":[{"$ref":"#\/components\/schemas\/id"}]},"DeploymentTask":{"required":["id","customerid","status","order"],"properties":{"id":{"$ref":"#\/components\/schemas\/deploymenttaskid"},"deploymentsourceid":{"$ref":"#\/components\/schemas\/deploymentsourceid"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"userid":{"$ref":"#\/components\/schemas\/userid"},"status":{"description":"Status of the task","type":"string","enum":["todo","doing","done","parked","note"]},"title":{"description":"Title of the task","type":"string","default":"","maxLength":255},"order":{"description":"Sorting order of this task","type":"integer"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"deleted_at":{"$ref":"#\/components\/schemas\/deleted_at"}},"type":"object"},"deploymenttaskupdateid":{"allOf":[{"$ref":"#\/components\/schemas\/id"}]},"DeploymentTaskUpdate":{"required":["id","deploymenttaskid","customerid"],"properties":{"id":{"$ref":"#\/components\/schemas\/deploymenttaskupdateid"},"deploymenttaskid":{"$ref":"#\/components\/schemas\/deploymenttaskid"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"userid":{"$ref":"#\/components\/schemas\/userid"},"body":{"description":"Body text content of the task update","type":"string","default":"","maxLength":4294967295},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"deleted_at":{"$ref":"#\/components\/schemas\/deleted_at"}},"type":"object"},"domain_pattern":{"allOf":[{"$ref":"#\/components\/schemas\/id"}]},"activity":{"description":"Include only domains of this activity type","type":"string","enum":["all","active","inactive"]},"DomainGroup":{"required":["id","customerid","name","domain_patterns","activity"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"name":{"description":"Name of the domaingroup","type":"string","maxLength":150,"example":"My group of domains"},"domain_patterns":{"description":"List of patterns matching domains in this group","type":"array","items":{"$ref":"#\/components\/schemas\/domain_pattern"}},"exclude_domain_patterns":{"description":"List of patterns for domains to exclude from this group","type":"array","items":{"$ref":"#\/components\/schemas\/domain_pattern"}},"activity":{"$ref":"#\/components\/schemas\/activity"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"}},"type":"object"},"id":{"description":"Unique number identifying this resource","type":"integer","format":"int32","minimum":1,"example":1},"created_at":{"description":"Timestamp when this resource was first created","type":"string","pattern":"\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}","example":"2017-07-21 17:32:28"},"updated_at":{"description":"Timestamp when this resource was most recently updated","type":"string","pattern":"\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}","example":"2018-02-14 12:30:12"},"deleted_at":{"description":"Timestamp when this resource was (soft) deleted","type":"string","pattern":"\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}","example":"2017-07-21 17:32:28"},"Subscription":{"required":["id","customerid","roleid","name","stripe_id","stripe_plan","type","volume","retention","quantity","trail_ends_at","ends_at","created_at","updated_at","stripe_status"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"roleid":{"description":"The role granted by this subscription","type":"integer"},"name":{"description":"The name of the subscription","type":"string"},"stripe_id":{"description":"The identifier in Stripe for this subscription","type":"string"},"stripe_plan":{"description":"The code in Stripe for this subscription","type":"string"},"type":{"description":"The type of the subscription","type":"string"},"volume":{"description":"The volume allowed in this subscription","type":"string"},"retention":{"description":"The retention for the data in the subscription","type":"string"},"quantity":{"description":"The quantity (typically 1)","type":"integer"},"trial_ends_at":{"$ref":"#\/components\/schemas\/datetime"},"ends_at":{"$ref":"#\/components\/schemas\/datetime"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"stripe_status":{"description":"The status of this subscription in Stripe","type":"string"},"plan":{"$ref":"#\/components\/schemas\/plan"},"cancelled":{"description":"Is the subscription marked at cancelled?","type":"boolean"},"active":{"description":"Is the subscription currently active?","type":"boolean"}},"type":"object"},"plan":{"properties":{"id":{"description":"The identifier of the plan","type":"string"},"active":{"description":"Is the plan active?","type":"string"},"amount":{"description":"The amount charged for this plan.","type":"string"},"currency":{"description":"The currenty used","type":"string"},"interval":{"description":"The interval when to renew this plan","type":"string"},"interval_count":{"description":"The interval count to renew this plan (eg. every 3 months)","type":"string"},"name":{"description":"The name of the plan","type":"string"},"metadata":{"$ref":"#\/components\/schemas\/plan-metadata"}},"type":"object"},"plan-metadata":{"properties":{"retention":{"description":"How long should the data for accounts in this plan be kept?","type":"string"},"max_volume":{"description":"The maximally allowed volume for accounts with this plan.","type":"string"},"reseller":{"description":"The allowed resellers for this plan.","type":"string"}},"type":"object"},"Country":{"type":"object","additionalProperties":{"type":"string"}},"Countries":{"type":"array","items":{"$ref":"#\/components\/schemas\/Country"},"example":{"AF":"Afghanistan","AX":"\u00c5land Islands"}},"State":{"properties":{"abbreviation":{"description":"2- or 3-letter abbreviation","type":"string"},"name":{"description":"Name of the state","type":"string"}},"type":"object"},"Timezone":{"properties":{"id":{"description":"Unique identification number","type":"string","format":"[1-9][0-9]*","example":"1"},"gmt":{"description":"Offset from Greenwich Mean Time","type":"string","format":"[-+][0-9]{2}:[0-9]{2}","example":"+02:00"},"name":{"description":"Texual description of the timezone","type":"string","example":"(GMT+02:00) Windhoek"}},"type":"object"},"Timezones":{"type":"array","items":{"$ref":"#\/components\/schemas\/Timezone"}},"AdminCustomerTransformed":{"allOf":[{"$ref":"#\/components\/schemas\/Customer"}]},"AdminCustomersTransformed":{"type":"array","items":{"$ref":"#\/components\/schemas\/AdminCustomerTransformed"}},"CustomerDelegationDefinitionTransformed":{"required":["id","customerid","uuid","label"],"properties":{"id":{"$ref":"#\/components\/schemas\/customerdelegationdefinitionid"},"customerid":{"$ref":"#\/components\/schemas\/customerid"},"uuid":{"$ref":"#\/components\/schemas\/uuid"},"label":{"description":"Name of the definition. Typically the domain name.","type":"string","maxLength":255}},"type":"object"},"CustomerUserTransformed":{"properties":{"saml_enforced":{"description":"Is login via SAML enforced for this user?","type":"boolean"},"has_send_failures":{"description":"Did emails sent to this user fail permanently?","type":"boolean"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/CustomerUser"}]},"DashboardDomainTransformer":{"properties":{"volume":{"description":"Domain volume","type":"integer","example":"0"},"volume_compliant":{"description":"Domain volume compliant","type":"integer","example":"0"},"volume_not_aligned":{"description":"Domain volume not aligned","type":"integer","example":"0"},"volume_not_passed":{"description":"Domain volume not passed","type":"integer","example":"0"},"compliance":{"description":"Domain compliance","required":["key"],"properties":{"spf":{"description":"SPF Info","required":["compliant","not_aligned","failed"],"properties":{"compliant":{"description":"Compliant","type":"integer"},"not_aligned":{"description":"Not aligned","type":"integer"},"failed":{"description":"Failed","type":"integer"}},"type":"object"},"dkim":{"description":"DKIM Info","required":["compliant","not_aligned","failed"],"properties":{"compliant":{"description":"Compliant","type":"integer"},"not_aligned":{"description":"Not aligned","type":"integer"},"failed":{"description":"Failed","type":"integer"}},"type":"object"}},"type":"object"},"domain":{"description":"Domain","type":"string","example":"example.com"},"activity":{"description":"Is the domain marked as active\/inactive? True is active, false is inactive, null is not specifically set.","type":"boolean","example":"true"},"firstdate":{"$ref":"#\/components\/schemas\/datetime"},"lastdate":{"$ref":"#\/components\/schemas\/datetime"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"nr_sub_domains":{"description":"Number of subdomains","type":"integer","example":"1"},"main_domain_has_volume":{"description":"Main subdomain has volume","type":"integer","example":"1"},"policy":{"properties":{"p":{"description":"The published policy","type":"string","example":"none"},"sp":{"description":"The published subdomain policy","type":"string","example":"none"},"pct":{"description":"The published percentage","type":"integer","maximum":100,"minimum":0,"example":100},"inherited":{"description":"Is this policy derived from an organizational domain and was it therefore inherited?","type":"boolean"}},"type":"object"},"issues":{"type":"array","items":{"description":"List of issues for the domain","type":"string","enum":["dmarc","dkim","spf"],"example":"dmarc"}},"status":{"description":"Current step in onboarding process","type":"string","enum":["onboarding","governance","policy_analysis","policy_enforcement","active_monitoring"],"example":"governance"},"spf_status":{"description":"Configuration status of this domain's SPF record","type":"string","enum":["configured","missing","invalid"],"example":"configured"},"spf_mechanism":{"description":"Fallback mechanism for this domain's SPF implementation","type":"string","enum":["redirect","+all","-all","~all","?all"],"example":"~all"},"actor":{"description":"Actor Info","required":["type","id"],"properties":{"type":{"description":"Actor Type","type":"string"},"id":{"description":"Actor ID","type":"string"}},"type":"object"}},"type":"object"},"DashboardGroupTransformer":{"properties":{"volume":{"description":"Domain volume","type":"integer","example":"0"},"volume_compliant":{"description":"Domain volume compliant","type":"integer","example":"0"},"volume_not_aligned":{"description":"Domain volume not aligned","type":"integer","example":"0"},"volume_not_passed":{"description":"Domain volume not passed","type":"integer","example":"0"},"compliance":{"description":"Domain compliance","required":["key"],"properties":{"spf":{"description":"SPF Info","required":["compliant","not_aligned","failed"],"properties":{"compliant":{"description":"Compliant","type":"integer"},"not_aligned":{"description":"Not aligned","type":"integer"},"failed":{"description":"Failed","type":"integer"}},"type":"object"},"dkim":{"description":"DKIM Info","required":["compliant","not_aligned","failed"],"properties":{"compliant":{"description":"Compliant","type":"integer"},"not_aligned":{"description":"Not aligned","type":"integer"},"failed":{"description":"Failed","type":"integer"}},"type":"object"}},"type":"object"},"domain":{"description":"Domain","type":"string","example":"example.com"},"activity":{"description":"Is the domain marked as active\/inactive? True is active, false is inactive, null is not specifically set.","type":"boolean","example":"true"},"firstdate":{"$ref":"#\/components\/schemas\/datetime"},"lastdate":{"$ref":"#\/components\/schemas\/datetime"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"nr_sub_domains":{"description":"Number of subdomains","type":"integer","example":"1"},"main_domain_has_volume":{"description":"Main subdomain has volume","type":"integer","example":"1"},"policy":{"properties":{"p":{"description":"The published policy","type":"string","example":"none"},"sp":{"description":"The published subdomain policy","type":"string","example":"none"},"pct":{"description":"The published percentage","type":"integer","maximum":100,"minimum":0,"example":100},"inherited":{"description":"Is this policy derived from an organizational domain and was it therefore inherited?","type":"boolean"}},"type":"object"},"issues":{"type":"array","items":{"description":"List of issues for the domain","type":"string","enum":["dmarc","dkim","spf"],"example":"dmarc"}},"status":{"description":"Current step in onboarding process","type":"string","enum":["onboarding","governance","policy_analysis","policy_enforcement","active_monitoring"],"example":"governance"},"spf_status":{"description":"Configuration status of this domain's SPF record","type":"string","enum":["configured","missing","invalid"],"example":"configured"},"spf_mechanism":{"description":"Fallback mechanism for this domain's SPF implementation","type":"string","enum":["redirect","+all","-all","~all","?all"],"example":"~all"},"actor":{"description":"Actor Info","required":["type","id"],"properties":{"type":{"description":"Actor Type","type":"string"},"id":{"description":"Actor ID","type":"string"}},"type":"object"}},"type":"object"},"DeploymentUserTransformed":{"required":["id","email","firstname","lastname","is_super_user"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"email":{"$ref":"#\/components\/schemas\/email"},"firstname":{"description":"First name of the user","type":"string","maxLength":255},"lastname":{"description":"Last name of the user","type":"string","maxLength":255},"is_super_user":{"description":"Is this user a super user?","type":"boolean","example":false}},"type":"object"},"Domain":{"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"domain":{"description":"Domain","type":"string","example":"magalhaes-pt.test"},"status":{"description":"Deployment status","type":"string","example":"onboarding"},"activity":{"description":"Is the domain marked as active\/inactive? True is active, false is inactive, null is not specifically set.","type":"boolean","example":"true"},"issues":{"description":"DomainTransformer","type":"array","items":{"description":"List of issues for the domain","type":"string","enum":["dmarc","dkim","spf"],"example":"dmarc"}},"dmarc":{"description":"DMARC policy","type":"string","example":"p=none"},"inherited":{"description":"Wheter DMARC policy is inherited or not","type":"boolean","example":"false"},"spf":{"description":"Configured SPF record and the mechanism used","type":"string","example":"configured [~all]"},"dkim":{"description":"DKIM selectors configured","type":"string","example":"selector1,selector2,selector3"}},"type":"object"},"OverviewTransformer":{"properties":{"volume":{"description":"Domain volume","type":"integer","example":"0"},"volume_compliant":{"description":"Domain volume compliant","type":"integer","example":"0"},"volume_not_aligned":{"description":"Domain volume not aligned","type":"integer","example":"0"},"volume_not_passed":{"description":"Domain volume not passed","type":"integer","example":"0"},"compliance":{"description":"Domain compliance","required":["key"],"properties":{"spf":{"description":"SPF Info","required":["compliant","not_aligned","failed"],"properties":{"compliant":{"description":"Compliant","type":"integer"},"not_aligned":{"description":"Not aligned","type":"integer"},"failed":{"description":"Failed","type":"integer"}},"type":"object"},"dkim":{"description":"DKIM Info","required":["compliant","not_aligned","failed"],"properties":{"compliant":{"description":"Compliant","type":"integer"},"not_aligned":{"description":"Not aligned","type":"integer"},"failed":{"description":"Failed","type":"integer"}},"type":"object"}},"type":"object"},"domain":{"description":"Domain","type":"string","example":"example.com"},"nr_sub_domains":{"description":"Number of subdomains","type":"integer","example":"1"},"main_domain_has_volume":{"description":"Main subdomain has volume","type":"integer","example":"1"}},"type":"object"},"UnconfirmedDomainTransformed":{"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"uuid":{"description":"The UUID for the hostname","type":"string"},"hostname":{"description":"The hostname which is not yet confirmed.","type":"string"},"reports":{"description":"The number of reports for this unconfirmed domain","type":"integer"}},"type":"object"},"personal_access_token":{"properties":{"client":{"description":"Definition of the client attached to this token","properties":{"id":{"description":"Unique identification number for the API client","type":"integer","minimum":1},"user_id":{"description":"Unique identification number for the user","type":"integer","minimum":1},"name":{"description":"Descriptive name of the client","type":"string","maxLength":255},"dmarc_client_id":{"description":"DMARC-only identifier for the client","type":"string","maxLength":100},"redirect":{"description":"URI to redirect to","type":"string","format":"uri"},"personal_access_client":{"description":"Is this client used for personal access tokens?","type":"boolean","default":true},"password_client":{"description":"Is this client used for password authentication?","type":"boolean"},"revoked":{"description":"Is the client no longer usable?","type":"boolean"},"dmarc_options":{"description":"Bitmask of flags for internal DMARC usage. 2 = Allow client switch on refresh","type":"integer"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"}},"type":"object"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/token"}]},"AggregateStatus":{"description":"Summary of reported e-mails","properties":{"accepted":{"description":"Number of accepted e-mails","type":"integer","minimum":0},"authenticated":{"description":"Number of authenticated e-mails (includes accepted)","type":"integer","minimum":0},"rejected":{"description":"Number of rejected e-mails","type":"integer","minimum":0},"total":{"description":"Total number of processed e-mails (authenticated + rejected)","type":"integer","minimum":0}},"type":"object"},"CustomerDelegationDefinitionDetails":{"required":["id","domain","hash"],"properties":{"id":{"$ref":"#\/components\/schemas\/uuid"},"domain":{"description":"Domain","type":"string","example":"example.com"},"hash":{"description":"A hash where the DNS records are published to","type":"string"},"dns-records":{"properties":{"spf":{"description":"SPF records","properties":{"published":{"description":"Is the mentioned SPF record published?","type":"boolean"},"normalised":{"description":"The normalized SPF record","type":"string","example":"v=spf1 ~all"},"compressed":{"description":"The compressed SPF record","type":"string","example":"v=spf1 ~all"},"record":{"description":"SPF records","properties":{"name":{"description":"The domain of the current SPF record","type":"string","example":"example.com"},"type":{"description":"The DNS type of the current SPF record","type":"string","example":"TXT"},"ttl":{"description":"The TTL of the current SPF record","type":"numeric","example":"86400"},"value":{"description":"The value of the current SPF record","type":"string","example":"v=spf1 redirect=hashexmp._spf.delegation-domain.test"}},"type":"object"}},"type":"object"}},"type":"object"},"definitions":{"properties":{"spf":{"description":"SPF definitions","properties":{"version":{"description":"The version of the SPF definition.","type":"string","example":"v=spf1"},"terms":{"description":"The terms used in the SPF definition.","type":"array","items":{"$ref":"#\/components\/schemas\/CustomerDelegationTerm"}},"qualifier":{"description":"The qualitified applied to this SPF definition.","type":"string","example":"~"}},"type":"object"}},"type":"object"}},"type":"object"},"CustomerDelegationTerm":{"required":["id","type"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"type":{"description":"Type of SPF record term","type":"string","enum":["a","mx","ip4","ip6","include","all","ptr","exists"]},"attributes":{"properties":{"label":{"description":"The label for this term","type":"string","example":"Email Service Provider for label X"},"target":{"description":"The target for this term","type":"string","example":"isp.hostname.test"},"address":{"description":"The address for this term","type":"string","example":"127.0.0.1"},"hostname":{"description":"The hostname for this term","type":"string","example":"mail.customer.test"},"cidr_ipv4":{"description":"The IPv4 CIDR mask for this term","type":"numeric","example":"32"},"cidr_ipv6":{"description":"The IPv6 CIDR mask for this term","type":"numeric","example":"128"},"cidr":{"description":"The CIDR mask for this term","type":"numeric","example":"32"}},"type":"object"}},"type":"object"},"CustomerDelegationLabel":{"required":["target","id","label"],"properties":{"target":{"description":"The domain this label is targetting","type":"string"},"id":{"$ref":"#\/components\/schemas\/id"},"label":{"description":"Type of SPF record term","type":"string"},"cache":{"type":"object"}},"type":"object"},"ForensicAggregation":{"description":"Summary of reported forensic reports","properties":{"key":{"description":"Hash to provide as a 'key' to filter out specific results for this group.","type":"string"},"subject":{"description":"Subject of the received forensic reports","type":"string"},"amount":{"description":"Number of received forensic reports","type":"integer"}},"type":"object"},"ForensicAuthResult":{"description":"Authentication result for a forensic report","properties":{"result":{"description":"The result of this specific authentication mechanism for the forensic report.","type":"string"},"aligned":{"description":"Was the result marked as aligned with the From header of the message?","type":"boolean"}},"type":"object"},"ForensicHeaders":{"description":"A list of headers","type":"array","items":{"description":"Value of the specified header","type":"string","example":"Subject of a mail"}},"HostDetail":{"description":"Detail for an IP address which has sent a specific message","properties":{"group":{"description":"The organizational domain of the hostname associated with the IP.","type":"string"},"ip":{"description":"The IP which has sent a specific message","type":"string"},"name":{"description":"The hostname for associated with the IP.","type":"string"},"country":{"description":"The ISO 3166 country code","type":"string"}},"type":"object"},"ForensicDetail":{"description":"Detail for a specific forensic report","properties":{"customerid":{"description":"The customerID for the report","type":"integer"},"message_id":{"description":"The message ID of the email failing DMARC.","type":"string"},"message_raw":{"description":"The encrypted raw message. This field is only available if a PGP key has been setup in the DMA account.","type":"string"},"domain":{"description":"The domain this message was sent on behalf of","type":"string"},"ip":{"description":"The IP which has sent this not compliant message","type":"string"},"organization":{"description":"The organization sending the DMARC forensic report","type":"string"},"received":{"description":"The date the message was received.","type":"string"},"dkim":{"$ref":"#\/components\/schemas\/ForensicAuthResult"},"spf":{"$ref":"#\/components\/schemas\/ForensicAuthResult"},"forensic_type":{"description":"The type of forensic message","type":"string"},"feedback_headers":{"description":"The headers of the forensic report as provided by the sender of the report.","properties":{"some-header":{"$ref":"#\/components\/schemas\/ForensicHeaders"}},"type":"object"},"mail_headers":{"description":"The headers of the email failing the DMARC checks","properties":{"some-header":{"$ref":"#\/components\/schemas\/ForensicHeaders"}},"type":"object"},"host":{"$ref":"#\/components\/schemas\/HostDetail"}},"type":"object"},"CustomerUserGet":{"properties":{"subscriptions":{"description":"A list of subscriptions for this user."},"invitations":{"description":"A list of invitations for this user."},"has_send_failures":{"description":"Did emails sent to this user fail permanently?","type":"boolean"}},"type":"object","allOf":[{"$ref":"#\/components\/schemas\/CustomerUser"}]},"ValidationProblem":{"required":["code","message"],"properties":{"code":{"description":"Computer-readable error code","type":"string","example":"invalid-version"},"message":{"description":"Human-readable error code","type":"string","example":"Version is not valid"},"tag":{"description":"The tag that caused the error","type":"string","example":"v"}},"type":"object"},"ValidationProblems":{"required":["errors","warnings","infos","total","actualProblems"],"properties":{"errors":{"description":"Issues that will cause problems","type":"array","items":{"$ref":"#\/components\/schemas\/ValidationProblem"}},"infos":{"description":"Issues that could be improved upon","type":"array","items":{"$ref":"#\/components\/schemas\/ValidationProblem"}},"warnings":{"description":"Issues that may cause problems","items":{"$ref":"#\/components\/schemas\/ValidationProblem"}},"total":{"description":"Number of reported issues","type":"integer","minimum":0,"example":0},"actualProblems":{"description":"Number of reported issues that require fixing","type":"integer","minimum":0,"example":0}},"type":"object"},"SpfValidationPart":{"required":["value","raw","qualifier"],"properties":{"value":{"description":"The parsed & processed value of the part","type":"string","example":"example.com"},"cidr":{"description":"The IPv4 range of the part (if applicable)","type":"string","example":""},"raw":{"description":"The unparsed value of the part (if applicable)","type":"string","example":""},"qualifier":{"description":"The qualifier of the part","type":"string","example":"~"}},"type":"object"},"SpfValidationRecord":{"properties":{"record":{"description":"The raw SPF record","type":"string","example":"v=spf1 a mx ~all"},"parts":{"description":"List of tags found in SPF record","type":"array","items":{"required":["v"],"properties":{"v":{"description":"SPF record version header","type":"string","example":"spf1"},"<tag name>":{"$ref":"#\/components\/schemas\/SpfValidationPart"}},"type":"object"}},"analyzed":{"description":"Information about the analysed record","required":["lookups"],"properties":{"lookups":{"description":"Number of lookups caused by this record","type":"integer","minimum":0,"example":3},"total_lookups":{"description":"Number of lookups caused by this record and it's children","type":"integer","minimum":0,"example":6}},"type":"object"},"type":{"description":"The type of DNS record parsed","type":"string","example":"TXT"},"has_macro":{"description":"Does this SPF record use macros?","type":"boolean","externalDocs":"http:\/\/www.openspf.org\/RFC_4408#macros","example":false}},"type":"object"},"SpfValidationVolumePart":{"required":["accepted","authenticated","rejected","total"],"properties":{"accepted":{"description":"The amount of accepted\/DMARC aligned volume","type":"integer","minimum":0,"example":"123"},"authenticated":{"description":"The amount of authenticated volume","type":"integer","minimum":0,"example":"123"},"rejected":{"description":"The amount of rejected volume","type":"integer","minimum":0,"example":"123"},"total":{"description":"The total volume","type":"integer","minimum":0,"example":"123"}},"type":"object"},"Version":{"properties":{"version":{"description":"API version string","type":"string","example":"v1"}},"type":"object"},"SpfTerm":{"required":["type"],"properties":{"type":{"description":"SPF term type.","type":"string","enum":["a","mx","include","ip4","ip6"]}},"type":"object","oneOf":[{"$ref":"#\/components\/schemas\/SpfTermA"},{"$ref":"#\/components\/schemas\/SpfTermMx"},{"$ref":"#\/components\/schemas\/SpfTermInclude"},{"$ref":"#\/components\/schemas\/SpfTermIp4"},{"$ref":"#\/components\/schemas\/SpfTermIp6"}]},"SpfTermA":{"required":["hostname","cidr_ipv4","cidr_ipv6"],"properties":{"label":{"description":"Descriptive label.","type":"string"},"hostname":{"description":"Domain name.","type":"string","format":"hostname"},"cidr_ipv4":{"description":"IPv4 netmask\/CIDR.","type":"integer","maximum":32,"minimum":1},"cidr_ipv6":{"description":"IPv6 netmask\/CIDR.","type":"integer","maximum":128,"minimum":1}},"type":"object"},"SpfTermInclude":{"required":["target"],"properties":{"label":{"description":"Descriptive label.","type":"string"},"target":{"description":"Domain name.","type":"string","format":"hostname"}},"type":"object"},"SpfTermIp4":{"required":["address","cidr"],"properties":{"label":{"description":"Descriptive label.","type":"string"},"address":{"description":"IPv4 address.","type":"string","format":"ipv4","example":"127.0.0.1"},"cidr":{"description":"IPv4 netmask\/CIDR.","type":"integer","maximum":32,"minimum":1}},"type":"object"},"SpfTermIp6":{"required":["address","cidr"],"properties":{"label":{"description":"Descriptive label.","type":"string"},"address":{"description":"IPv6 address.","type":"string","format":"ipv6","example":"2001:db8::1:0:0:1"},"cidr":{"description":"IPv6 netmask\/CIDR.","type":"integer","maximum":128,"minimum":1}},"type":"object"},"SpfTermMx":{"allOf":[{"$ref":"#\/components\/schemas\/SpfTermA"},{"required":["hostname","cidr_ipv4","cidr_ipv6"],"properties":{"label":{"description":"Descriptive label.","type":"string"},"hostname":{"description":"Domain name.","type":"string","format":"hostname"},"cidr_ipv4":{"description":"IPv4 netmask\/CIDR.","type":"integer","maximum":32,"minimum":1},"cidr_ipv6":{"description":"IPv6 netmask\/CIDR.","type":"integer","maximum":128,"minimum":1}},"type":"object"}]},"token":{"properties":{"id":{"description":"Unique identifier for the token","type":"string","maxLength":100},"user_id":{"description":"Unique identification number for the user","type":"integer","minimum":1},"client_id":{"description":"Unique identification number for the API client","type":"integer","minimum":1},"name":{"description":"Descriptive name of the token","type":"string","maxLength":255},"scopes":{"description":"List of scopes","type":"array","items":{"type":"string"}},"revoked":{"description":"Is the token no longer usable?","type":"boolean"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"expires_at":{"$ref":"#\/components\/schemas\/datetime"}},"type":"object"},"customerid":{"description":"Number identifying the customer who owns this resource","type":"integer","format":"int32","minimum":1,"example":1},"domainid":{"description":"Number identifying a domain","type":"integer","format":"int32","minimum":1,"example":1},"email":{"description":"E-mail address","type":"string","format":"email","example":"person@example.com"},"datetime":{"description":"Date-time formatted as `yyyy-mm-dd hh:mm:ss`","type":"string","pattern":"\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}","example":"2018-06-05 13:53:45"},"dateinterval":{"description":"Difference between two dates, described by multiples of time units","type":"string","pattern":"P(\\d+[YMDWHMS])+","externalDocs":"http:\/\/php.net\/manual\/en\/class.dateinterval.php","example":"P3M"},"period":{"properties":{"from":{"$ref":"#\/components\/schemas\/dateinterval"},"to":{"$ref":"#\/components\/schemas\/dateinterval"}},"type":"object"},"datetime-object":{"properties":{"date":{"$ref":"#\/components\/schemas\/datetime"},"timezone_type":{"description":"Type of timezone. 1 = UTC offzet, 2 = Abbreviation, 3 = Full text identifier","type":"integer","maximum":3,"minimum":1,"example":3},"timezone":{"description":"Timezone descriptor, according to `timezone_type`","type":"string","example":"Europe\/Berlin"}},"type":"object"},"uuid":{"description":"Unique resource identification","type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000"},"meta-pagination":{"required":["pagination"],"properties":{"pagination":{"required":["total","count","per_page","current_page","total_pages","links"],"properties":{"total":{"description":"Total number of records","type":"integer","minimum":0},"count":{"description":"Number of records on the currently retrieved page","type":"integer","minimum":0},"per_page":{"description":"Page size (maximum number of records per page)","type":"integer","minimum":0},"current_page":{"description":"1-based index of the page","type":"integer","minimum":1},"total_pages":{"description":"Number of pages","type":"integer","minimum":0},"links":{"properties":{"previous":{"description":"URI to retrieve the next page of data","type":"string","format":"uri"},"next":{"description":"URI to retrieve the next page of data","type":"string","format":"uri"}},"type":"object"}},"type":"object"}},"type":"object"},"meta-cursor":{"required":["pagination"],"properties":{"pagination":{"required":["cursor","more"],"properties":{"cursor":{"description":"Identifier used to retrieve the next page","type":"string"},"more":{"description":"Are there more pages available?","type":"boolean"}},"type":"object"}},"type":"object"},"DomainIssuesModel":{"required":["id","domain_id","type"],"properties":{"id":{"$ref":"#\/components\/schemas\/id"},"domain_id":{"$ref":"#\/components\/schemas\/domainid"},"type":{"description":"The DNS type of the error","type":"string","enum":["spf","dkim","dmarc"]},"selector":{"description":"An optional selector","type":"string"},"created_at":{"$ref":"#\/components\/schemas\/created_at"},"updated_at":{"$ref":"#\/components\/schemas\/updated_at"},"deleted_at":{"$ref":"#\/components\/schemas\/deleted_at"}},"type":"object"},"AlignedData":{"description":"One or more values may be provided (depends on data). Possible property values are: spf\/dkim\/both\/empty","properties":{"<aligned_result>":{"properties":{"<passed_result>":{"type":"integer"}},"type":"object"}},"type":"object"},"AggregateGenericData":{"properties":{"total":{"type":"integer"},"disposition":{"properties":{"reject":{"type":"integer"},"quarantine":{"type":"integer"},"none":{"type":"integer"}},"type":"object"},"aligned":{"$ref":"#\/components\/schemas\/AlignedData"},"forwarded":{"type":"array","items":{"properties":{"accept":{"type":"integer"},"reject":{"type":"integer"}},"type":"object"}},"example":{"properties":{"dkim":{"type":"array","items":{"properties":{"result":{"type":"string"},"domain":{"type":"string"},"selector":{"type":"string"},"aligned":{"type":"boolean"},"human_result":{"type":"string"}},"type":"object"}},"spf":{"type":"array","items":{"properties":{"result":{"type":"string"},"domain":{"type":"string"},"scope":{"type":"string"},"aligned":{"type":"boolean"},"human_result":{"type":"string"}},"type":"object"}},"policy_published":{"properties":{"p":{"type":"string"},"pct":{"type":"string"}},"type":"object"},"identifiers":{"properties":{"header_from":{"type":"string"},"envelope_from":{"type":"string"},"envelope_to":{"type":"string"}},"type":"object"},"hashes":{"properties":{"detailed_domain":{"type":"string"},"detailed_org":{"type":"string"}},"type":"object"},"host":{"properties":{"country":{"type":"string"},"ip":{"type":"string"},"name":{"type":"string"},"group":{"type":"string"}},"type":"object"},"report":{"properties":{"org":{"type":"string"}},"type":"object"},"whatif":{"type":"string","example":"reject"},"source":{"properties":{"source_id":{"type":"integer","example":null},"forwarder_id":{"type":"integer","example":null},"forwarded":{"type":"boolean"},"group":{"type":"string","example":"direct"}},"type":"object"},"policy_evaluated":{"type":"array","items":{"properties":{"reason":{"type":"array","items":[]},"disposition":{"type":"string","example":"none"},"dkim":{"type":"string","example":"fail"},"spf":{"type":"string","example":"pass"}},"type":"object"}},"consistent":{"type":"boolean"}},"type":"object"},"source_group":{"description":"Multi-level array of data for each of the source groups. Keys of the result are (in order of appearance): source_group, source ID, forwarder ID, was the message forwarded?, alignment result, disposition. Final result is the total number of messages.","properties":{"selfcontrolledspf":{"type":"object"},"selfcontrolleddkimorunmatchable":{"type":"object"},"fail":{"type":"object"},"direct":{"type":"object"},"dkimpreserver":{"type":"object"},"notcompliant":{"type":"object"}},"type":"object"},"mindates":{"properties":{"<report.mindate.microseconds>":{"properties":{"<report.maxdate.microseconds>":{"properties":{"dmarcanalyzer.test":{"properties":{"accept":{"type":"integer"},"reject":{"type":"integer"}},"type":"object"}},"type":"object"}},"type":"object"}},"type":"object"},"day":{"properties":{"<report.mindate.microseconds>":{"$ref":"#\/components\/schemas\/AlignedData"}},"type":"object"}},"type":"object"}},"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"description":"Empty array","type":"object"}}}},"400":{"description":"Bad Request","content":{"application\/json":{"schema":{"required":["message"],"properties":{"message":{"description":"Human-readable error identifier","type":"string","example":"Bad Request"},"errors":{"description":"Computer-readable errors","type":"array","items":{"type":"object","example":{"name":"reason"},"additionalProperties":{"type":"string"}}},"error":{"description":"Computer-readable error identifier","type":"integer","example":1},"hint":{"description":"Human-readable hint for solving the error","type":"string","example":"Invalid parameters."},"status_code":{"description":"HTTP status code","type":"integer","example":400}},"type":"object"}}}},"401":{"description":"Unauthorized","content":{"application\/json":{"schema":{"required":["message"],"properties":{"message":{"description":"Human-readable error identifier","type":"string","example":"Unauthorized"},"errors":{"description":"Computer-readable errors","type":"array","items":{"type":"object","example":{"name":"reason"},"additionalProperties":{"type":"string"}}},"error":{"description":"Computer-readable error identifier","type":"integer","example":1},"hint":{"description":"Human-readable hint for solving the error","type":"string","example":"You are not authorized to delete domains."},"status_code":{"description":"HTTP status code","type":"integer","example":401}},"type":"object"}}}},"403":{"description":"Forbidden","content":{"application\/json":{"schema":{"required":["message"],"properties":{"message":{"description":"Human-readable error identifier","type":"string","example":"Forbidden"},"errors":{"description":"Computer-readable errors","type":"array","items":{"type":"object","example":{"name":"reason"},"additionalProperties":{"type":"string"}}},"error":{"description":"Computer-readable error identifier","type":"integer","example":1},"hint":{"description":"Human-readable hint for solving the error","type":"string","example":"Report cannot be deleted."},"status_code":{"description":"HTTP status code","type":"integer","example":403}},"type":"object"}}}},"404":{"description":"Not Found","content":{"application\/json":{"schema":{"required":["message"],"properties":{"message":{"description":"Human-readable error identifier","type":"string","example":"Not Found"},"errors":{"description":"Computer-readable errors","type":"array","items":{"type":"object","example":{"name":"reason"},"additionalProperties":{"type":"string"}}},"error":{"description":"Computer-readable error identifier","type":"integer","example":1},"hint":{"description":"Human-readable hint for solving the error","type":"string","example":"Domain does not exist."},"status_code":{"description":"HTTP status code","type":"integer","example":404}},"type":"object"}}}},"422":{"description":"Unprocessable Entity","content":{"application\/json":{"schema":{"required":["message"],"properties":{"message":{"description":"Human-readable error identifier","type":"string","example":"Unprocessable Entity"},"errors":{"description":"Computer-readable errors","type":"array","items":{"type":"object","example":{"entity":"reason"},"additionalProperties":{"type":"string"}}},"error":{"description":"Computer-readable error identifier","type":"integer","example":1},"hint":{"description":"Human-readable hint for solving the error","type":"string","example":"Not a valid entity."},"status_code":{"description":"HTTP status code","type":"integer","example":422}},"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application\/json":{"schema":{"required":["message"],"properties":{"message":{"description":"Human-readable error identifier","type":"string","example":"Internal Server Error"},"status_code":{"description":"HTTP status code","type":"integer","example":500}},"type":"object"}}}},"default":{"description":"Unexpected error","content":{"application\/json":{"schema":{"required":["message"],"properties":{"message":{"description":"Human-readable error identifier","type":"string","example":"Unexpected error"},"errors":{"description":"Computer-readable errors","type":"array","items":{"type":"object","example":{"key":["value A","value B"]},"additionalProperties":{"type":"string"}}},"error":{"description":"Computer-readable error identifier","type":"integer","example":1},"hint":{"description":"Human-readable hint for solving the error","type":"string","example":"Unexpected error."},"status_code":{"description":"HTTP status code","type":"integer","example":900}},"type":"object"}}}}},"parameters":{"domaingroup":{"name":"domaingroup","in":"path","description":"Number uniquely identifying a domaingroup","schema":{"type":"integer","format":"int32","minimum":1}},"customer":{"name":"customer","in":"path","description":"Number uniquely identifying a customer","required":true,"schema":{"type":"integer","format":"int32","minimum":1}},"user":{"name":"user","in":"path","description":"Number uniquely identifying a user","required":true,"schema":{"type":"integer","format":"int32","minimum":1}},"domain":{"name":"domain","in":"path","description":"Domainname, without `HTTP(S):\/\/` scheme","required":true,"schema":{"type":"string"}},"page":{"name":"page","in":"query","description":"The result page to retrieve","schema":{"type":"integer","minimum":1,"default":1}},"filter[range]":{"name":"filter[range]","in":"query","description":"Number of items to retrieve in a single page","schema":{"type":"integer","minimum":1}},"filter[period][start]":{"name":"filter[period][start]","in":"query","description":"Start date (inclusive) of the reporting period","schema":{"type":"string","format":"date"}},"filter[period][end]":{"name":"filter[period][end]","in":"query","description":"End date (inclusive) of the reporting period","schema":{"type":"string","format":"date"}},"filter[domain]":{"name":"filter[domain]","in":"query","description":"(Start of) domain name to filter results by","schema":{"type":"string"}},"filter[domains]":{"name":"filter[domains]","in":"query","description":"Limit retrieved domain names to this list","schema":{"type":"array","items":{"type":"string","description":"domain name"}}},"filter[empty]":{"name":"filter[empty]","in":"query","description":"Exclude domains without volume"}},"securitySchemes":{"Personal Access Token":{"type":"http","description":"Enter your access token","in":"header","scheme":"bearer"},"OAuth2":{"type":"oauth2","description":"Enter your username, password and the client ID & secret provided to you","in":"header","scheme":"https","flows":{"password":{"tokenUrl":"\/login\/access_token","refreshUrl":"\/login\/access_token","scopes":[]},"clientCredentials":{"tokenUrl":"\/login\/access_token","refreshUrl":"\/login\/access_token","scopes":[]}}}}},"security":[{"OAuth2":[],"Personal Access Token":[]}],"tags":[{"name":"Aggregate","description":"Aggregate reports"},{"name":"Delegation","description":"Customer Delegation Definition"},{"name":"Domains","description":"Handle a customer's domains"},{"name":"DomainGroup","description":"Handle groups of domains"},{"name":"Users","description":"Handle users of the application"},{"name":"Data","description":"Generic system data (lists, tables, etc.)"},{"name":"Domain","description":"Validate various DNS records for your domain"},{"name":"Index","description":"Information about the API itself"},{"name":"Login","description":"User authentication"},{"name":"API","description":"API personal access tokens"}],"externalDocs":{"description":"Find out more about DMARC Analyzer","url":"https:\/\/dmarcanalyzer.com"}}