diff --git a/docs/docset.yml b/docs/docset.yml
new file mode 100644
index 000000000..25ffc404d
--- /dev/null
+++ b/docs/docset.yml
@@ -0,0 +1,487 @@
+project: 'APM PHP agent docs'
+cross_links:
+ - apm-agent-rum-js
+ - docs-content
+toc:
+ - toc: reference
+ - toc: release-notes
+subs:
+ ref: "https://www.elastic.co/guide/en/elasticsearch/reference/current"
+ ref-bare: "https://www.elastic.co/guide/en/elasticsearch/reference"
+ ref-8x: "https://www.elastic.co/guide/en/elasticsearch/reference/8.1"
+ ref-80: "https://www.elastic.co/guide/en/elasticsearch/reference/8.0"
+ ref-7x: "https://www.elastic.co/guide/en/elasticsearch/reference/7.17"
+ ref-70: "https://www.elastic.co/guide/en/elasticsearch/reference/7.0"
+ ref-60: "https://www.elastic.co/guide/en/elasticsearch/reference/6.0"
+ ref-64: "https://www.elastic.co/guide/en/elasticsearch/reference/6.4"
+ xpack-ref: "https://www.elastic.co/guide/en/x-pack/6.2"
+ logstash-ref: "https://www.elastic.co/guide/en/logstash/current"
+ kibana-ref: "https://www.elastic.co/guide/en/kibana/current"
+ kibana-ref-all: "https://www.elastic.co/guide/en/kibana"
+ beats-ref-root: "https://www.elastic.co/guide/en/beats"
+ beats-ref: "https://www.elastic.co/guide/en/beats/libbeat/current"
+ beats-ref-60: "https://www.elastic.co/guide/en/beats/libbeat/6.0"
+ beats-ref-63: "https://www.elastic.co/guide/en/beats/libbeat/6.3"
+ beats-devguide: "https://www.elastic.co/guide/en/beats/devguide/current"
+ auditbeat-ref: "https://www.elastic.co/guide/en/beats/auditbeat/current"
+ packetbeat-ref: "https://www.elastic.co/guide/en/beats/packetbeat/current"
+ metricbeat-ref: "https://www.elastic.co/guide/en/beats/metricbeat/current"
+ filebeat-ref: "https://www.elastic.co/guide/en/beats/filebeat/current"
+ functionbeat-ref: "https://www.elastic.co/guide/en/beats/functionbeat/current"
+ winlogbeat-ref: "https://www.elastic.co/guide/en/beats/winlogbeat/current"
+ heartbeat-ref: "https://www.elastic.co/guide/en/beats/heartbeat/current"
+ journalbeat-ref: "https://www.elastic.co/guide/en/beats/journalbeat/current"
+ ingest-guide: "https://www.elastic.co/guide/en/ingest/current"
+ fleet-guide: "https://www.elastic.co/guide/en/fleet/current"
+ apm-guide-ref: "https://www.elastic.co/guide/en/apm/guide/current"
+ apm-guide-7x: "https://www.elastic.co/guide/en/apm/guide/7.17"
+ apm-app-ref: "https://www.elastic.co/guide/en/kibana/current"
+ apm-agents-ref: "https://www.elastic.co/guide/en/apm/agent"
+ apm-android-ref: "https://www.elastic.co/guide/en/apm/agent/android/current"
+ apm-py-ref: "https://www.elastic.co/guide/en/apm/agent/python/current"
+ apm-py-ref-3x: "https://www.elastic.co/guide/en/apm/agent/python/3.x"
+ apm-node-ref-index: "https://www.elastic.co/guide/en/apm/agent/nodejs"
+ apm-node-ref: "https://www.elastic.co/guide/en/apm/agent/nodejs/current"
+ apm-node-ref-1x: "https://www.elastic.co/guide/en/apm/agent/nodejs/1.x"
+ apm-rum-ref: "https://www.elastic.co/guide/en/apm/agent/rum-js/current"
+ apm-ruby-ref: "https://www.elastic.co/guide/en/apm/agent/ruby/current"
+ apm-java-ref: "https://www.elastic.co/guide/en/apm/agent/java/current"
+ apm-go-ref: "https://www.elastic.co/guide/en/apm/agent/go/current"
+ apm-dotnet-ref: "https://www.elastic.co/guide/en/apm/agent/dotnet/current"
+ apm-php-ref: "https://www.elastic.co/guide/en/apm/agent/php/current"
+ apm-ios-ref: "https://www.elastic.co/guide/en/apm/agent/swift/current"
+ apm-lambda-ref: "https://www.elastic.co/guide/en/apm/lambda/current"
+ apm-attacher-ref: "https://www.elastic.co/guide/en/apm/attacher/current"
+ docker-logging-ref: "https://www.elastic.co/guide/en/beats/loggingplugin/current"
+ esf-ref: "https://www.elastic.co/guide/en/esf/current"
+ kinesis-firehose-ref: "https://www.elastic.co/guide/en/kinesis/{{kinesis_version}}"
+ estc-welcome-current: "https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current"
+ estc-welcome: "https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current"
+ estc-welcome-all: "https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions"
+ hadoop-ref: "https://www.elastic.co/guide/en/elasticsearch/hadoop/current"
+ stack-ref: "https://www.elastic.co/guide/en/elastic-stack/current"
+ stack-ref-67: "https://www.elastic.co/guide/en/elastic-stack/6.7"
+ stack-ref-68: "https://www.elastic.co/guide/en/elastic-stack/6.8"
+ stack-ref-70: "https://www.elastic.co/guide/en/elastic-stack/7.0"
+ stack-ref-80: "https://www.elastic.co/guide/en/elastic-stack/8.0"
+ stack-ov: "https://www.elastic.co/guide/en/elastic-stack-overview/current"
+ stack-gs: "https://www.elastic.co/guide/en/elastic-stack-get-started/current"
+ stack-gs-current: "https://www.elastic.co/guide/en/elastic-stack-get-started/current"
+ javaclient: "https://www.elastic.co/guide/en/elasticsearch/client/java-api/current"
+ java-api-client: "https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current"
+ java-rest: "https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current"
+ jsclient: "https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current"
+ jsclient-current: "https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current"
+ es-ruby-client: "https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current"
+ es-dotnet-client: "https://www.elastic.co/guide/en/elasticsearch/client/net-api/current"
+ es-php-client: "https://www.elastic.co/guide/en/elasticsearch/client/php-api/current"
+ es-python-client: "https://www.elastic.co/guide/en/elasticsearch/client/python-api/current"
+ defguide: "https://www.elastic.co/guide/en/elasticsearch/guide/2.x"
+ painless: "https://www.elastic.co/guide/en/elasticsearch/painless/current"
+ plugins: "https://www.elastic.co/guide/en/elasticsearch/plugins/current"
+ plugins-8x: "https://www.elastic.co/guide/en/elasticsearch/plugins/8.1"
+ plugins-7x: "https://www.elastic.co/guide/en/elasticsearch/plugins/7.17"
+ plugins-6x: "https://www.elastic.co/guide/en/elasticsearch/plugins/6.8"
+ glossary: "https://www.elastic.co/guide/en/elastic-stack-glossary/current"
+ upgrade_guide: "https://www.elastic.co/products/upgrade_guide"
+ blog-ref: "https://www.elastic.co/blog/"
+ curator-ref: "https://www.elastic.co/guide/en/elasticsearch/client/curator/current"
+ curator-ref-current: "https://www.elastic.co/guide/en/elasticsearch/client/curator/current"
+ metrics-ref: "https://www.elastic.co/guide/en/metrics/current"
+ metrics-guide: "https://www.elastic.co/guide/en/metrics/guide/current"
+ logs-ref: "https://www.elastic.co/guide/en/logs/current"
+ logs-guide: "https://www.elastic.co/guide/en/logs/guide/current"
+ uptime-guide: "https://www.elastic.co/guide/en/uptime/current"
+ observability-guide: "https://www.elastic.co/guide/en/observability/current"
+ observability-guide-all: "https://www.elastic.co/guide/en/observability"
+ siem-guide: "https://www.elastic.co/guide/en/siem/guide/current"
+ security-guide: "https://www.elastic.co/guide/en/security/current"
+ security-guide-all: "https://www.elastic.co/guide/en/security"
+ endpoint-guide: "https://www.elastic.co/guide/en/endpoint/current"
+ sql-odbc: "https://www.elastic.co/guide/en/elasticsearch/sql-odbc/current"
+ ecs-ref: "https://www.elastic.co/guide/en/ecs/current"
+ ecs-logging-ref: "https://www.elastic.co/guide/en/ecs-logging/overview/current"
+ ecs-logging-go-logrus-ref: "https://www.elastic.co/guide/en/ecs-logging/go-logrus/current"
+ ecs-logging-go-zap-ref: "https://www.elastic.co/guide/en/ecs-logging/go-zap/current"
+ ecs-logging-go-zerolog-ref: "https://www.elastic.co/guide/en/ecs-logging/go-zap/current"
+ ecs-logging-java-ref: "https://www.elastic.co/guide/en/ecs-logging/java/current"
+ ecs-logging-dotnet-ref: "https://www.elastic.co/guide/en/ecs-logging/dotnet/current"
+ ecs-logging-nodejs-ref: "https://www.elastic.co/guide/en/ecs-logging/nodejs/current"
+ ecs-logging-php-ref: "https://www.elastic.co/guide/en/ecs-logging/php/current"
+ ecs-logging-python-ref: "https://www.elastic.co/guide/en/ecs-logging/python/current"
+ ecs-logging-ruby-ref: "https://www.elastic.co/guide/en/ecs-logging/ruby/current"
+ ml-docs: "https://www.elastic.co/guide/en/machine-learning/current"
+ eland-docs: "https://www.elastic.co/guide/en/elasticsearch/client/eland/current"
+ eql-ref: "https://eql.readthedocs.io/en/latest/query-guide"
+ extendtrial: "https://www.elastic.co/trialextension"
+ wikipedia: "https://en.wikipedia.org/wiki"
+ forum: "https://discuss.elastic.co/"
+ xpack-forum: "https://discuss.elastic.co/c/50-x-pack"
+ security-forum: "https://discuss.elastic.co/c/x-pack/shield"
+ watcher-forum: "https://discuss.elastic.co/c/x-pack/watcher"
+ monitoring-forum: "https://discuss.elastic.co/c/x-pack/marvel"
+ graph-forum: "https://discuss.elastic.co/c/x-pack/graph"
+ apm-forum: "https://discuss.elastic.co/c/apm"
+ enterprise-search-ref: "https://www.elastic.co/guide/en/enterprise-search/current"
+ app-search-ref: "https://www.elastic.co/guide/en/app-search/current"
+ workplace-search-ref: "https://www.elastic.co/guide/en/workplace-search/current"
+ enterprise-search-node-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/enterprise-search-node/current"
+ enterprise-search-php-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/php/current"
+ enterprise-search-python-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/python/current"
+ enterprise-search-ruby-ref: "https://www.elastic.co/guide/en/enterprise-search-clients/ruby/current"
+ elastic-maps-service: "https://maps.elastic.co"
+ integrations-docs: "https://docs.elastic.co/en/integrations"
+ integrations-devguide: "https://www.elastic.co/guide/en/integrations-developer/current"
+ time-units: "https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units"
+ byte-units: "https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units"
+ apm-py-ref-v: "https://www.elastic.co/guide/en/apm/agent/python/current"
+ apm-node-ref-v: "https://www.elastic.co/guide/en/apm/agent/nodejs/current"
+ apm-rum-ref-v: "https://www.elastic.co/guide/en/apm/agent/rum-js/current"
+ apm-ruby-ref-v: "https://www.elastic.co/guide/en/apm/agent/ruby/current"
+ apm-java-ref-v: "https://www.elastic.co/guide/en/apm/agent/java/current"
+ apm-go-ref-v: "https://www.elastic.co/guide/en/apm/agent/go/current"
+ apm-ios-ref-v: "https://www.elastic.co/guide/en/apm/agent/swift/current"
+ apm-dotnet-ref-v: "https://www.elastic.co/guide/en/apm/agent/dotnet/current"
+ apm-php-ref-v: "https://www.elastic.co/guide/en/apm/agent/php/current"
+ ecloud: "Elastic Cloud"
+ esf: "Elastic Serverless Forwarder"
+ ess: "Elasticsearch Service"
+ ece: "Elastic Cloud Enterprise"
+ eck: "Elastic Cloud on Kubernetes"
+ serverless-full: "Elastic Cloud Serverless"
+ serverless-short: "Serverless"
+ es-serverless: "Elasticsearch Serverless"
+ es3: "Elasticsearch Serverless"
+ obs-serverless: "Elastic Observability Serverless"
+ sec-serverless: "Elastic Security Serverless"
+ serverless-docs: "https://docs.elastic.co/serverless"
+ cloud: "https://www.elastic.co/guide/en/cloud/current"
+ ess-utm-params: "?page=docs&placement=docs-body"
+ ess-baymax: "?page=docs&placement=docs-body"
+ ess-trial: "https://cloud.elastic.co/registration?page=docs&placement=docs-body"
+ ess-product: "https://www.elastic.co/cloud/elasticsearch-service?page=docs&placement=docs-body"
+ ess-console: "https://cloud.elastic.co?page=docs&placement=docs-body"
+ ess-console-name: "Elasticsearch Service Console"
+ ess-deployments: "https://cloud.elastic.co/deployments?page=docs&placement=docs-body"
+ ece-ref: "https://www.elastic.co/guide/en/cloud-enterprise/current"
+ eck-ref: "https://www.elastic.co/guide/en/cloud-on-k8s/current"
+ ess-leadin: "You can run Elasticsearch on your own hardware or use our hosted Elasticsearch Service that is available on AWS, GCP, and Azure. https://cloud.elastic.co/registration{ess-utm-params}[Try the Elasticsearch Service for free]."
+ ess-leadin-short: "Our hosted Elasticsearch Service is available on AWS, GCP, and Azure, and you can https://cloud.elastic.co/registration{ess-utm-params}[try it for free]."
+ ess-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg[link=\"https://cloud.elastic.co/registration{ess-utm-params}\", title=\"Supported on Elasticsearch Service\"]"
+ ece-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud_ece.svg[link=\"https://cloud.elastic.co/registration{ess-utm-params}\", title=\"Supported on Elastic Cloud Enterprise\"]"
+ cloud-only: "This feature is designed for indirect use by https://cloud.elastic.co/registration{ess-utm-params}[Elasticsearch Service], https://www.elastic.co/guide/en/cloud-enterprise/{ece-version-link}[Elastic Cloud Enterprise], and https://www.elastic.co/guide/en/cloud-on-k8s/current[Elastic Cloud on Kubernetes]. Direct use is not supported."
+ ess-setting-change: "image:https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg[link=\"{ess-trial}\", title=\"Supported on {ess}\"] indicates a change to a supported https://www.elastic.co/guide/en/cloud/current/ec-add-user-settings.html[user setting] for Elasticsearch Service."
+ ess-skip-section: "If you use Elasticsearch Service, skip this section. Elasticsearch Service handles these changes for you."
+ api-cloud: "https://www.elastic.co/docs/api/doc/cloud"
+ api-ece: "https://www.elastic.co/docs/api/doc/cloud-enterprise"
+ api-kibana-serverless: "https://www.elastic.co/docs/api/doc/serverless"
+ es-feature-flag: "This feature is in development and not yet available for use. This documentation is provided for informational purposes only."
+ es-ref-dir: "'{{elasticsearch-root}}/docs/reference'"
+ apm-app: "APM app"
+ uptime-app: "Uptime app"
+ synthetics-app: "Synthetics app"
+ logs-app: "Logs app"
+ metrics-app: "Metrics app"
+ infrastructure-app: "Infrastructure app"
+ siem-app: "SIEM app"
+ security-app: "Elastic Security app"
+ ml-app: "Machine Learning"
+ dev-tools-app: "Dev Tools"
+ ingest-manager-app: "Ingest Manager"
+ stack-manage-app: "Stack Management"
+ stack-monitor-app: "Stack Monitoring"
+ alerts-ui: "Alerts and Actions"
+ rules-ui: "Rules"
+ rac-ui: "Rules and Connectors"
+ connectors-ui: "Connectors"
+ connectors-feature: "Actions and Connectors"
+ stack-rules-feature: "Stack Rules"
+ user-experience: "User Experience"
+ ems: "Elastic Maps Service"
+ ems-init: "EMS"
+ hosted-ems: "Elastic Maps Server"
+ ipm-app: "Index Pattern Management"
+ ingest-pipelines: "ingest pipelines"
+ ingest-pipelines-app: "Ingest Pipelines"
+ ingest-pipelines-cap: "Ingest pipelines"
+ ls-pipelines: "Logstash pipelines"
+ ls-pipelines-app: "Logstash Pipelines"
+ maint-windows: "maintenance windows"
+ maint-windows-app: "Maintenance Windows"
+ maint-windows-cap: "Maintenance windows"
+ custom-roles-app: "Custom Roles"
+ data-source: "data view"
+ data-sources: "data views"
+ data-source-caps: "Data View"
+ data-sources-caps: "Data Views"
+ data-source-cap: "Data view"
+ data-sources-cap: "Data views"
+ project-settings: "Project settings"
+ manage-app: "Management"
+ index-manage-app: "Index Management"
+ data-views-app: "Data Views"
+ rules-app: "Rules"
+ saved-objects-app: "Saved Objects"
+ tags-app: "Tags"
+ api-keys-app: "API keys"
+ transforms-app: "Transforms"
+ connectors-app: "Connectors"
+ files-app: "Files"
+ reports-app: "Reports"
+ maps-app: "Maps"
+ alerts-app: "Alerts"
+ crawler: "Enterprise Search web crawler"
+ ents: "Enterprise Search"
+ app-search-crawler: "App Search web crawler"
+ agent: "Elastic Agent"
+ agents: "Elastic Agents"
+ fleet: "Fleet"
+ fleet-server: "Fleet Server"
+ integrations-server: "Integrations Server"
+ ingest-manager: "Ingest Manager"
+ ingest-management: "ingest management"
+ package-manager: "Elastic Package Manager"
+ integrations: "Integrations"
+ package-registry: "Elastic Package Registry"
+ artifact-registry: "Elastic Artifact Registry"
+ aws: "AWS"
+ stack: "Elastic Stack"
+ xpack: "X-Pack"
+ es: "Elasticsearch"
+ kib: "Kibana"
+ esms: "Elastic Stack Monitoring Service"
+ esms-init: "ESMS"
+ ls: "Logstash"
+ beats: "Beats"
+ auditbeat: "Auditbeat"
+ filebeat: "Filebeat"
+ heartbeat: "Heartbeat"
+ metricbeat: "Metricbeat"
+ packetbeat: "Packetbeat"
+ winlogbeat: "Winlogbeat"
+ functionbeat: "Functionbeat"
+ journalbeat: "Journalbeat"
+ es-sql: "Elasticsearch SQL"
+ esql: "ES|QL"
+ elastic-agent: "Elastic Agent"
+ k8s: "Kubernetes"
+ log-driver-long: "Elastic Logging Plugin for Docker"
+ security: "X-Pack security"
+ security-features: "security features"
+ operator-feature: "operator privileges feature"
+ es-security-features: "Elasticsearch security features"
+ stack-security-features: "Elastic Stack security features"
+ endpoint-sec: "Endpoint Security"
+ endpoint-cloud-sec: "Endpoint and Cloud Security"
+ elastic-defend: "Elastic Defend"
+ elastic-sec: "Elastic Security"
+ elastic-endpoint: "Elastic Endpoint"
+ swimlane: "Swimlane"
+ sn: "ServiceNow"
+ sn-itsm: "ServiceNow ITSM"
+ sn-itom: "ServiceNow ITOM"
+ sn-sir: "ServiceNow SecOps"
+ jira: "Jira"
+ ibm-r: "IBM Resilient"
+ webhook: "Webhook"
+ webhook-cm: "Webhook - Case Management"
+ opsgenie: "Opsgenie"
+ bedrock: "Amazon Bedrock"
+ gemini: "Google Gemini"
+ hive: "TheHive"
+ monitoring: "X-Pack monitoring"
+ monitor-features: "monitoring features"
+ stack-monitor-features: "Elastic Stack monitoring features"
+ watcher: "Watcher"
+ alert-features: "alerting features"
+ reporting: "X-Pack reporting"
+ report-features: "reporting features"
+ graph: "X-Pack graph"
+ graph-features: "graph analytics features"
+ searchprofiler: "Search Profiler"
+ xpackml: "X-Pack machine learning"
+ ml: "machine learning"
+ ml-cap: "Machine learning"
+ ml-init: "ML"
+ ml-features: "machine learning features"
+ stack-ml-features: "Elastic Stack machine learning features"
+ ccr: "cross-cluster replication"
+ ccr-cap: "Cross-cluster replication"
+ ccr-init: "CCR"
+ ccs: "cross-cluster search"
+ ccs-cap: "Cross-cluster search"
+ ccs-init: "CCS"
+ ilm: "index lifecycle management"
+ ilm-cap: "Index lifecycle management"
+ ilm-init: "ILM"
+ dlm: "data lifecycle management"
+ dlm-cap: "Data lifecycle management"
+ dlm-init: "DLM"
+ search-snap: "searchable snapshot"
+ search-snaps: "searchable snapshots"
+ search-snaps-cap: "Searchable snapshots"
+ slm: "snapshot lifecycle management"
+ slm-cap: "Snapshot lifecycle management"
+ slm-init: "SLM"
+ rollup-features: "data rollup features"
+ ipm: "index pattern management"
+ ipm-cap: "Index pattern"
+ rollup: "rollup"
+ rollup-cap: "Rollup"
+ rollups: "rollups"
+ rollups-cap: "Rollups"
+ rollup-job: "rollup job"
+ rollup-jobs: "rollup jobs"
+ rollup-jobs-cap: "Rollup jobs"
+ dfeed: "datafeed"
+ dfeeds: "datafeeds"
+ dfeed-cap: "Datafeed"
+ dfeeds-cap: "Datafeeds"
+ ml-jobs: "machine learning jobs"
+ ml-jobs-cap: "Machine learning jobs"
+ anomaly-detect: "anomaly detection"
+ anomaly-detect-cap: "Anomaly detection"
+ anomaly-job: "anomaly detection job"
+ anomaly-jobs: "anomaly detection jobs"
+ anomaly-jobs-cap: "Anomaly detection jobs"
+ dataframe: "data frame"
+ dataframes: "data frames"
+ dataframe-cap: "Data frame"
+ dataframes-cap: "Data frames"
+ watcher-transform: "payload transform"
+ watcher-transforms: "payload transforms"
+ watcher-transform-cap: "Payload transform"
+ watcher-transforms-cap: "Payload transforms"
+ transform: "transform"
+ transforms: "transforms"
+ transform-cap: "Transform"
+ transforms-cap: "Transforms"
+ dataframe-transform: "transform"
+ dataframe-transform-cap: "Transform"
+ dataframe-transforms: "transforms"
+ dataframe-transforms-cap: "Transforms"
+ dfanalytics-cap: "Data frame analytics"
+ dfanalytics: "data frame analytics"
+ dataframe-analytics-config: "'{dataframe} analytics config'"
+ dfanalytics-job: "'{dataframe} analytics job'"
+ dfanalytics-jobs: "'{dataframe} analytics jobs'"
+ dfanalytics-jobs-cap: "'{dataframe-cap} analytics jobs'"
+ cdataframe: "continuous data frame"
+ cdataframes: "continuous data frames"
+ cdataframe-cap: "Continuous data frame"
+ cdataframes-cap: "Continuous data frames"
+ cdataframe-transform: "continuous transform"
+ cdataframe-transforms: "continuous transforms"
+ cdataframe-transforms-cap: "Continuous transforms"
+ ctransform: "continuous transform"
+ ctransform-cap: "Continuous transform"
+ ctransforms: "continuous transforms"
+ ctransforms-cap: "Continuous transforms"
+ oldetection: "outlier detection"
+ oldetection-cap: "Outlier detection"
+ olscore: "outlier score"
+ olscores: "outlier scores"
+ fiscore: "feature influence score"
+ evaluatedf-api: "evaluate {dataframe} analytics API"
+ evaluatedf-api-cap: "Evaluate {dataframe} analytics API"
+ binarysc: "binary soft classification"
+ binarysc-cap: "Binary soft classification"
+ regression: "regression"
+ regression-cap: "Regression"
+ reganalysis: "regression analysis"
+ reganalysis-cap: "Regression analysis"
+ depvar: "dependent variable"
+ feature-var: "feature variable"
+ feature-vars: "feature variables"
+ feature-vars-cap: "Feature variables"
+ classification: "classification"
+ classification-cap: "Classification"
+ classanalysis: "classification analysis"
+ classanalysis-cap: "Classification analysis"
+ infer-cap: "Inference"
+ infer: "inference"
+ lang-ident-cap: "Language identification"
+ lang-ident: "language identification"
+ data-viz: "Data Visualizer"
+ file-data-viz: "File Data Visualizer"
+ feat-imp: "feature importance"
+ feat-imp-cap: "Feature importance"
+ nlp: "natural language processing"
+ nlp-cap: "Natural language processing"
+ apm-agent: "APM agent"
+ apm-go-agent: "Elastic APM Go agent"
+ apm-go-agents: "Elastic APM Go agents"
+ apm-ios-agent: "Elastic APM iOS agent"
+ apm-ios-agents: "Elastic APM iOS agents"
+ apm-java-agent: "Elastic APM Java agent"
+ apm-java-agents: "Elastic APM Java agents"
+ apm-dotnet-agent: "Elastic APM .NET agent"
+ apm-dotnet-agents: "Elastic APM .NET agents"
+ apm-node-agent: "Elastic APM Node.js agent"
+ apm-node-agents: "Elastic APM Node.js agents"
+ apm-php-agent: "Elastic APM PHP agent"
+ apm-php-agents: "Elastic APM PHP agents"
+ apm-py-agent: "Elastic APM Python agent"
+ apm-py-agents: "Elastic APM Python agents"
+ apm-ruby-agent: "Elastic APM Ruby agent"
+ apm-ruby-agents: "Elastic APM Ruby agents"
+ apm-rum-agent: "Elastic APM Real User Monitoring (RUM) JavaScript agent"
+ apm-rum-agents: "Elastic APM RUM JavaScript agents"
+ apm-lambda-ext: "Elastic APM AWS Lambda extension"
+ project-monitors: "project monitors"
+ project-monitors-cap: "Project monitors"
+ private-location: "Private Location"
+ private-locations: "Private Locations"
+ pwd: "YOUR_PASSWORD"
+ esh: "ES-Hadoop"
+ default-dist: "default distribution"
+ oss-dist: "OSS-only distribution"
+ observability: "Observability"
+ api-request-title: "Request"
+ api-prereq-title: "Prerequisites"
+ api-description-title: "Description"
+ api-path-parms-title: "Path parameters"
+ api-query-parms-title: "Query parameters"
+ api-request-body-title: "Request body"
+ api-response-codes-title: "Response codes"
+ api-response-body-title: "Response body"
+ api-example-title: "Example"
+ api-examples-title: "Examples"
+ api-definitions-title: "Properties"
+ multi-arg: "†footnoteref:[multi-arg,This parameter accepts multiple arguments.]"
+ multi-arg-ref: "†footnoteref:[multi-arg]"
+ yes-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/icon-yes.png[Yes,20,15]"
+ no-icon: "image:https://doc-icons.s3.us-east-2.amazonaws.com/icon-no.png[No,20,15]"
+ es-repo: "https://github.com/elastic/elasticsearch/"
+ es-issue: "https://github.com/elastic/elasticsearch/issues/"
+ es-pull: "https://github.com/elastic/elasticsearch/pull/"
+ es-commit: "https://github.com/elastic/elasticsearch/commit/"
+ kib-repo: "https://github.com/elastic/kibana/"
+ kib-issue: "https://github.com/elastic/kibana/issues/"
+ kibana-issue: "'{kib-repo}issues/'"
+ kib-pull: "https://github.com/elastic/kibana/pull/"
+ kibana-pull: "'{kib-repo}pull/'"
+ kib-commit: "https://github.com/elastic/kibana/commit/"
+ ml-repo: "https://github.com/elastic/ml-cpp/"
+ ml-issue: "https://github.com/elastic/ml-cpp/issues/"
+ ml-pull: "https://github.com/elastic/ml-cpp/pull/"
+ ml-commit: "https://github.com/elastic/ml-cpp/commit/"
+ apm-repo: "https://github.com/elastic/apm-server/"
+ apm-issue: "https://github.com/elastic/apm-server/issues/"
+ apm-pull: "https://github.com/elastic/apm-server/pull/"
+ kibana-blob: "https://github.com/elastic/kibana/blob/current/"
+ apm-get-started-ref: "https://www.elastic.co/guide/en/apm/get-started/current"
+ apm-server-ref: "https://www.elastic.co/guide/en/apm/server/current"
+ apm-server-ref-v: "https://www.elastic.co/guide/en/apm/server/current"
+ apm-server-ref-m: "https://www.elastic.co/guide/en/apm/server/master"
+ apm-server-ref-62: "https://www.elastic.co/guide/en/apm/server/6.2"
+ apm-server-ref-64: "https://www.elastic.co/guide/en/apm/server/6.4"
+ apm-server-ref-70: "https://www.elastic.co/guide/en/apm/server/7.0"
+ apm-overview-ref-v: "https://www.elastic.co/guide/en/apm/get-started/current"
+ apm-overview-ref-70: "https://www.elastic.co/guide/en/apm/get-started/7.0"
+ apm-overview-ref-m: "https://www.elastic.co/guide/en/apm/get-started/master"
+ infra-guide: "https://www.elastic.co/guide/en/infrastructure/guide/current"
+ a-data-source: "a data view"
+ icon-bug: "pass:[]"
+ icon-checkInCircleFilled: "pass:[]"
+ icon-warningFilled: "pass:[]"
diff --git a/docs/reference/configuration-reference.md b/docs/reference/configuration-reference.md
new file mode 100644
index 000000000..6d79f09b8
--- /dev/null
+++ b/docs/reference/configuration-reference.md
@@ -0,0 +1,532 @@
+---
+mapped_pages:
+ - https://www.elastic.co/guide/en/apm/agent/php/current/configuration-reference.html
+---
+
+# Configuration reference [configuration-reference]
+
+
+## `api_key` [config-api-key]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_API_KEY` | `elastic_apm.api_key` |
+
+| Default | Type |
+| --- | --- |
+| None | String |
+
+This string is used to ensure that only your agents can send data to your APM Server. You must have created the API key using the APM Server [command line tool](docs-content://solutions/observability/apps/api-keys.md).
+
+[`api_key`](#config-api-key) is an alternative to [`secret_token`](#config-secret-token). If both [`secret_token`](#config-secret-token) and [`api_key`](#config-api-key) are configured, then [`api_key`](#config-api-key) has precedence and [`secret_token`](#config-secret-token) is ignored.
+
+::::{note}
+This feature is fully supported in the APM Server versions >= 7.6.
+::::
+
+
+::::{warning}
+The `api_key` value is sent as plain-text in every request to the server, so you should also secure your communications using HTTPS. Unless you do so, your API Key could be observed by an attacker.
+::::
+
+
+
+## `breakdown_metrics` [config-breakdown-metrics]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_BREAKDOWN_METRICS` | `elastic_apm.breakdown_metrics` |
+
+| Default | Type |
+| --- | --- |
+| true | Boolean |
+
+If this configuration option is set to `true` the agent will collect and report breakdown metrics (`span.self_time`) used for "Time spent by span type" chart. Set it to `false` to disable the collection and reporting of breakdown metrics, which can reduce the overhead of the agent.
+
+::::{note}
+This feature requires APM Server and Kibana >= 7.3.
+::::
+
+
+
+## `capture_errors` [config-capture-errors]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_CAPTURE_ERRORS` | `elastic_apm.capture_errors` |
+
+| Default | Type |
+| --- | --- |
+| true | Boolean |
+
+If this configuration option is set to `true` the agent will collect and report error events. Set it to `false` to disable the collection and reporting of APM error events, which can reduce the overhead of the agent.
+
+Also see [PHP errors as APM error events](/reference/configuration.md#configure-php-error-reporting).
+
+
+## `disable_instrumentations` [config-disable-instrumentations]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_DISABLE_INSTRUMENTATIONS` | `elastic_apm.disable_instrumentations` |
+
+| Default | Type |
+| --- | --- |
+| empty list | List of strings |
+
+A comma-separated list of wildcard expressions to match instrumentation names which should be disabled. When an instrumentation is disabled, no spans will be created for that instrumentation. Each instrumentation has a name and any number of keywords. If the instrumentation’s name or any of its keywords match this configuration option then the instrumentation is disabled.
+
+See [Wildcard](/reference/configuration.md#configure-wildcard) for more details on how to use wildcard expressions.
+
+Supported instrumentations:
+
+| Name | Keywords |
+| --- | --- |
+| `curl` | `HTTP-client` |
+| `PDO` | `DB` |
+| `MySQLi` | `DB` |
+
+Examples:
+
+* `db` disables both PDO and MySQLi instrumentations
+* `*HTTP*` disables curl instrumentation
+
+
+## `disable_send` [config-disable-send]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_DISABLE_SEND` | `elastic_apm.disable_send` |
+
+| Default | Type |
+| --- | --- |
+| false | Boolean |
+
+If set to `true`, the agent will work as usual, except for any task requiring communication with the APM server. Events will be dropped and the agent won’t be able to receive central configuration, which means that any other configuration cannot be changed in this state without restarting the service. Example uses for this setting are: maintaining the ability to create traces and log trace/transaction/span IDs through the log correlation feature, and getting automatic distributed tracing via the [W3C HTTP headers](https://w3c.github.io/trace-context/).
+
+
+## `enabled` [config-enabled]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_ENABLED` | `elastic_apm.enabled` |
+
+| Default | Type |
+| --- | --- |
+| true | Boolean |
+
+Setting to false will completely disable the agent.
+
+
+## `environment` [config-environment]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_ENVIRONMENT` | `elastic_apm.environment` |
+
+| Default | Type |
+| --- | --- |
+| None | String |
+
+The name of the environment this service is deployed in, e.g. "production" or "staging".
+
+Environments allow you to easily filter data on a global level in the APM app. It’s important to be consistent when naming environments across agents. See [environment selector](docs-content://solutions/observability/apps/filter-application-data.md#apm-filter-your-data-service-environment-filter) in the Kibana UI for more information.
+
+::::{note}
+This feature is fully supported in the APM app in Kibana versions >= 7.2. You must use the query bar to filter for a specific environment in versions prior to 7.2.
+::::
+
+
+
+## `global_labels` [config-global-labels]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_GLOBAL_LABELS` | `elastic_apm.global_labels` |
+
+| Default | Type |
+| --- | --- |
+| empty map | string to string map |
+
+Labels from this configuration are added to all the entities produced by the agent.
+
+The format is `key=value[,key=value[,...]]`. For example `dept=engineering,rack=number8`.
+
+::::{note}
+When setting this configuration option in `.ini` file it is required to enclose the value in quotes (because the value contains equal sign). For example `elastic_apm.global_labels = "dept=engineering,rack=number8"`
+::::
+
+
+Any labels set by the application via the agent’s public API will override global labels with the same keys.
+
+::::{note}
+This option requires APM Server 7.2 or later. It will have no effect on older versions.
+::::
+
+
+
+## `hostname` [config-hostname]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_HOSTNAME` | `elastic_apm.hostname` |
+
+| Default | Type |
+| --- | --- |
+| the local machine’s host name | String |
+
+This option allows for the reported host name to be configured. If this option is not set the local machine’s host name is used.
+
+
+## `log_level` [config-log-level]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_LOG_LEVEL` | `elastic_apm.log_level` |
+
+| Default | Type |
+| --- | --- |
+| None | Log level |
+
+A fallback configuration setting to control the logging level for the agent. Only used when a sink-specific option is not explicitly set. See [Logging](/reference/configuration.md#configure-logging) for details.
+
+
+## `log_level_stderr` [config-log-level-stderr]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_LOG_LEVEL_STDERR` | `elastic_apm.log_level_stderr` |
+
+| Default | Type |
+| --- | --- |
+| `CRITICAL` | Log level |
+
+The logging level for `stderr` logging sink. See [Logging](/reference/configuration.md#configure-logging) for details.
+
+
+## `log_level_syslog` [config-log-level-syslog]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_LOG_LEVEL_SYSLOG` | `elastic_apm.log_level_syslog` |
+
+| Default | Type |
+| --- | --- |
+| `INFO` | Log level |
+
+The logging level for `syslog` logging sink. See [Logging](/reference/configuration.md#configure-logging) for details.
+
+
+## `profiling_inferred_spans_enabled` [config-profiling-inferred-spans-enabled]
+
+::::{warning}
+This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.
+::::
+
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_PROFILING_INFERRED_SPANS_ENABLED` | `elastic_apm.profiling_inferred_spans_enabled` |
+
+| Default | Type |
+| --- | --- |
+| `false` | Boolean |
+
+If this option is set to `true` then the agent creates spans for method executions based on sampling aka statistical profiler.
+
+Due to the nature of how sampling profilers work, the duration of the inferred spans are not exact, but only estimations. See [`profiling_inferred_spans_sampling_interval`](#config-profiling-inferred-spans-sampling-interval) to fine tune the trade-off between accuracy and overhead.
+
+
+## `profiling_inferred_spans_min_duration` [config-profiling-inferred-spans-min-duration]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_PROFILING_INFERRED_SPANS_MIN_DURATION` | `elastic_apm.profiling_inferred_spans_min_duration` |
+
+| Default | Type |
+| --- | --- |
+| `0ms` | Duration |
+
+The minimum duration of an inferred span.
+
+Note that effective minimum duration is also affected by the sampling interval so it is max([`profiling_inferred_spans_min_duration`](#config-profiling-inferred-spans-min-duration), [`profiling_inferred_spans_sampling_interval`](#config-profiling-inferred-spans-sampling-interval))
+
+This configuration option supports the duration suffixes: `ms`, `s` and `m`. For example: `100ms`.
+
+
+## `profiling_inferred_spans_sampling_interval` [config-profiling-inferred-spans-sampling-interval]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_PROFILING_INFERRED_SPANS_SAMPLING_INTERVAL` | `elastic_apm.profiling_inferred_spans_sampling_interval` |
+
+| Default | Type |
+| --- | --- |
+| `50ms` | Duration |
+
+The frequency at which stack traces are gathered in order to construct inferred spans. The lower this is set, the more accurate the inferred spans durations will be. On the other hand higher accuracy comes at the expense of higher overhead and more inferred spans for potentially irrelevant operations (see [`profiling_inferred_spans_min_duration`](#config-profiling-inferred-spans-min-duration)).
+
+This configuration option supports the duration suffixes: `ms`, `s` and `m`. For example: `50ms`.
+
+
+## `secret_token` [config-secret-token]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SECRET_TOKEN` | `elastic_apm.secret_token` |
+
+| Default | Type |
+| --- | --- |
+| None | String |
+
+This string is used to ensure that only your agents can send data to your APM Server. Both the agents and the APM Server have to be configured with the same secret token.
+
+See [the relevant APM Server’s documentation](docs-content://solutions/observability/apps/secret-token.md) on how to configure APM Server’s secret token.
+
+Use this setting if the APM Server requires a token, like in {{ess}}.
+
+[`secret_token`](#config-secret-token) is an alternative to [`api_key`](#config-api-key). If both [`secret_token`](#config-secret-token) and [`api_key`](#config-api-key) are configured then [`api_key`](#config-api-key) has precedence and [`secret_token`](#config-secret-token) is ignored.
+
+::::{warning}
+The `secret_token` is sent as plain-text in every request to the server, so you should also secure your communications using HTTPS. Unless you do so, your secret token could be observed by an attacker.
+::::
+
+
+
+## `server_timeout` [config-server-timeout]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SERVER_TIMEOUT` | `elastic_apm.server_timeout` |
+
+| Default | Type |
+| --- | --- |
+| `30s` | Duration |
+
+If a request sending events to the APM server takes longer than the configured timeout, the request is canceled and the events are discarded.
+
+The value has to be provided in **[duration format](/reference/configuration.md#configure-duration-format)**.
+
+This option’s default unit is `s` (seconds).
+
+If the value is `0` (or `0ms`, `0s`, etc.) the timeout for sending events to the APM Server is disabled.
+
+Negative values are invalid and result in the default value being used instead.
+
+
+## `server_url` [config-server-url]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SERVER_URL` | `elastic_apm.server_url` |
+
+| Default | Type |
+| --- | --- |
+| `http://localhost:8200` | String |
+
+The URL for your APM Server. The URL must be fully qualified, including protocol (`http` or `https`) and port.
+
+
+## `service_name` [config-service-name]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SERVICE_NAME` | `elastic_apm.service_name` |
+
+| Default | Type |
+| --- | --- |
+| `unknown-php-service` | String |
+
+This is used to keep all the errors and transactions of your service together and is the primary filter in the Elastic APM user interface.
+
+::::{note}
+The service name must conform to this regular expression: `^[a-zA-Z0-9 _-]+$`. In other words, a service name must only contain characters from the ASCII alphabet, numbers, dashes, underscores, and spaces. Characters in service name that don’t match regular expression will be replaced by `_` (underscore) character.
+::::
+
+
+
+## `service_node_name` [config-service-node-name]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SERVICE_NODE_NAME` | `elastic_apm.service_node_name` |
+
+| Default | Type |
+| --- | --- |
+| None | String |
+
+If it’s set, this name is used to distinguish between different nodes of a service. If it’s not set, data aggregations will be done based on the container ID if the monitored application runs in a container. Otherwise data aggregations will be done based on the reported hostname (automatically discovered or manually configured using [`hostname`](#config-hostname)).
+
+
+## `service_version` [config-service-version]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SERVICE_VERSION` | `elastic_apm.service_version` |
+
+| Default | Type |
+| --- | --- |
+| None | String |
+
+The version of the currently deployed service. If your deployments are not versioned, the recommended value for this field is the commit identifier of the deployed revision, e.g., the output of git rev-parse HEAD.
+
+
+## `span_compression_enabled` [config-span-compression-enabled]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SPAN_COMPRESSION_ENABLED` | `elastic_apm.span_compression_enabled` |
+
+| Default | Type |
+| --- | --- |
+| true | Boolean |
+
+Setting this option to true will enable span compression feature. Span compression reduces the collection, processing, and storage overhead, and removes clutter from the UI. The tradeoff is that some information such as DB statements of all the compressed spans will not be collected.
+
+
+## `span_compression_exact_match_max_duration` [config-span-compression-exact-match-max-duration]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION` | `elastic_apm.span_compression_exact_match_max_duration` |
+
+| Default | Type |
+| --- | --- |
+| `50ms` | Duration |
+
+Consecutive spans that are exact match and that are under this threshold will be compressed into a single composite span. This option does not apply to composite spans. This reduces the collection, processing, and storage overhead, and removes clutter from the UI. The tradeoff is that the DB statements of all the compressed spans will not be collected.
+
+Since it is **max** duration threshold setting this configuration option to 0 effectively disables this compression strategy because only spans with duration 0 will be considered eligible for compression with this strategy.
+
+This configuration option supports the duration suffixes: `ms`, `s` and `m`. For example: `10ms`. This option’s default unit is `ms`, so `5` is interpreted as `5ms`.
+
+
+## `span_compression_same_kind_max_duration` [config-span-compression-same-kind-max-duration]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION` | `elastic_apm.span_compression_same_kind_max_duration` |
+
+| Default | Type |
+| --- | --- |
+| `0ms` | Duration |
+
+Consecutive spans to the same destination that are under this threshold will be compressed into a single composite span. This option does not apply to composite spans. This reduces the collection, processing, and storage overhead, and removes clutter from the UI. The tradeoff is that the DB statements of all the compressed spans will not be collected.
+
+Since it is **max** duration threshold setting this configuration option to 0 effectively disables this compression strategy because only spans with duration 0 will be considered eligible for compression with this strategy.
+
+This configuration option supports the duration suffixes: `ms`, `s` and `m`. For example: `10ms`. This option’s default unit is `ms`, so `5` is interpreted as `5ms`.
+
+
+## `span_stack_trace_min_duration` [config-span-stack-trace-min-duration]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION` | `elastic_apm.span_stack_trace_min_duration` |
+
+| Default | Type |
+| --- | --- |
+| `5ms` | Duration |
+
+While it might be very helpful to have stack trace attached to a span, collecting stack traces does have some overhead. This configuration controls the minimum span duration at which stack traces are collected. A higher value means lower overhead as stack trace collection is skipped for quick spans.
+
+Set this config to:
+
+* any positive value (e.g. `5ms`) - to limit stack trace collection to spans with duration equal to or greater than the given value (e.g. 5 milliseconds)
+* `0` (or `0` with any duration units e.g. `0ms`) - to collect stack traces for spans with any duration
+* any negative value (e.g. `-1ms`) - to disable stack trace collection for spans completely
+
+This configuration option supports the duration suffixes: `ms`, `s` and `m`. For example: `10ms`. This option’s default unit is `ms`, so `5` is interpreted as `5ms`.
+
+
+## `stack_trace_limit` [config-stack-trace-limit]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_STACK_TRACE_LIMIT` | `elastic_apm.stack_trace_limit` |
+
+| Default | Type |
+| --- | --- |
+| `50` | Integer |
+
+This option controls how many frames are included in stack traces captured by the agent.
+
+Set this config to:
+
+* any positive integer - to define the maximum number of frames included in stack traces
+* `0` - to disable stack trace capturing
+* any negative integer - to capture all frames
+
+
+## `transaction_ignore_urls` [config-transaction-ignore-urls]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_TRANSACTION_IGNORE_URLS` | `elastic_apm.transaction_ignore_urls` |
+
+| Default | Type |
+| --- | --- |
+| empty list | List of wildcard expressions |
+
+This option instructs the agent to ignore requests with certain URLs by not to creating transactions for those requests. It only affects automatic creation of transactions by the agent but user can still create transactions manually by using [agent’s public API](/reference/public-api.md).
+
+See [Wildcard](/reference/configuration.md#configure-wildcard) section for more details on how to use wildcard expressions.
+
+
+## `transaction_max_spans` [config-transaction-max-spans]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_TRANSACTION_MAX_SPANS` | `elastic_apm.transaction_max_spans` |
+
+| Default | Type |
+| --- | --- |
+| 500 | Integer |
+
+This limits the amount of spans that are recorded per transaction. This is helpful in cases where a transaction creates a very high amount of spans, for example, thousands of SQL queries. Setting an upper limit helps prevent overloading the Agent and APM server in these edge cases.
+
+If the value is `0` no spans will be collected.
+
+Negative values are invalid and result in the default value being used instead.
+
+
+## `transaction_sample_rate` [config-transaction-sample-rate]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_TRANSACTION_SAMPLE_RATE` | `elastic_apm.transaction_sample_rate` |
+
+| Default | Type |
+| --- | --- |
+| 1.0 | Floating-point number |
+
+By default, the agent will sample every transaction (e.g., a request to your service). To reduce overhead and storage requirements, set the sample rate to a value between `0.0` and `1.0`. The agent still records the overall time and result for unsampled transactions, but not context information, labels, or spans.
+
+
+## `verify_server_cert` [config-verify-server-cert]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_VERIFY_SERVER_CERT` | `elastic_apm.verify_server_cert` |
+
+| Default | Type |
+| --- | --- |
+| `true` | Boolean |
+
+By default, the agent verifies the SSL certificate if you use an HTTPS connection to the APM server. The verification can be disabled by changing this setting to `false`.
+
+
+## `url_groups` [config-url-groups]
+
+| Environment variable name | Option name in `php.ini` |
+| --- | --- |
+| `ELASTIC_APM_URL_GROUPS` | `elastic_apm.url_groups` |
+
+| Default | Type |
+| --- | --- |
+| empty list | List of wildcard expressions |
+
+With this option, you can group several URL paths together by using wildcard expressions like `/user/*` - this way `/user/Alice` and `/user/Bob` will be mapped to transaction name `/user/*`.
+
+See [Wildcard](/reference/configuration.md#configure-wildcard) section for more details on how to use wildcard expressions.
+
diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md
new file mode 100644
index 000000000..180ef7c61
--- /dev/null
+++ b/docs/reference/configuration.md
@@ -0,0 +1,159 @@
+---
+mapped_pages:
+ - https://www.elastic.co/guide/en/apm/agent/php/current/configuration.html
+---
+
+# Configuration [configuration]
+
+Utilize configuration options to adapt the Elastic APM agent to your needs. One way to configure settings is with the `php.ini` file:
+
+```ini
+elastic_apm.server_url=http://localhost:8200
+elastic_apm.service_name="My service"
+```
+
+The agent can also be configured using environment variables:
+
+```shell
+export ELASTIC_APM_SERVER_URL="http://localhost:8200"
+export ELASTIC_APM_SERVICE_NAME="My service"
+```
+
+::::{note}
+If you use environment variables to configure the agent, make sure the process running your PHP code inherits those environment variables after they were set.
+::::
+
+
+
+## {{ess}} on {{ecloud}} [configure-ess]
+
+The agent can be configured to send data to an [{{ess}} APM instance](https://www.elastic.co/cloud/elasticsearch-service?page=docs&placement=docs-body) by setting the [`server_url`](/reference/configuration-reference.md#config-server-url) and [`secret_token`](/reference/configuration-reference.md#config-secret-token) options to the corresponding values found in the APM & Fleet section of {{ecloud}}.
+
+Configure the agent, for example via `php.ini`:
+
+```ini
+elastic_apm.server_url=APM_SERVER_URL
+elastic_apm.secret_token=TOKEN
+elastic_apm.service_name=SERVICE_NAME
+```
+
+
+## Control the amount of APM data emitted by the agent [configure-apm-data-amount]
+
+The following configuration settings control the amount of APM data emitted by the agent. They can be tuned to reduce the agent overhead on the monitored application, network utilization, and the amount of storage required by {{es}}.
+
+* [`transaction_sample_rate`](/reference/configuration-reference.md#config-transaction-sample-rate)
+* [`breakdown_metrics`](/reference/configuration-reference.md#config-breakdown-metrics)
+* [PHP errors as APM error events](#configure-php-error-reporting)
+* [`capture_errors`](/reference/configuration-reference.md#config-capture-errors)
+
+
+## Logging [configure-logging]
+
+::::{note}
+Configuration settings described in this section are related to logs emitted by the agent itself and not the logs emitted by the monitored application. The intended use case for these configuration settings is for the agent’s supportability. The logs emitted by the agent are not stored in Elasticsearch by default, so reducing the level for these logs will not reduce the amount of storage used in Elasticsearch-- see [Control the amount of APM data emitted by the agent](#configure-apm-data-amount) instead.
+::::
+
+
+The easiest way to configure the logging is by using the [`log_level_syslog`](/reference/configuration-reference.md#config-log-level-syslog) configuration option.
+
+Available log levels are:
+
+```text
+OFF
+CRITICAL
+ERROR
+WARNING
+INFO
+DEBUG
+TRACE
+```
+
+For example, if you specify a `WARNING` log level, only log records with levels `WARNING`, `ERROR`, and `CRITICAL` will be emitted.
+
+`OFF` is only used to disable agent logging.
+
+The agent supports logging to the following sinks: syslog and stderr. Control the level of logging for individual sinks with the [`log_level_syslog`](/reference/configuration-reference.md#config-log-level-syslog) and [`log_level_stderr`](/reference/configuration-reference.md#config-log-level-stderr) options. When a sink-specific logging level is not explicitly set, the fallback setting [`log_level`](/reference/configuration-reference.md#config-log-level) will be used.
+
+For example, the following configuration sets the log level to `WARNING` for all the sinks:
+
+```ini
+elastic_apm.log_level=WARNING
+```
+
+Alternatively, the following configuration sets log level to `WARNING` for all the sinks except for `syslog`, where the log level is set to `TRACE`.
+
+```ini
+elastic_apm.log_level=WARNING
+elastic_apm.log_level_syslog=TRACE
+```
+
+
+## PHP errors as APM error events [configure-php-error-reporting]
+
+The agent automatically creates APM error events for PHP errors triggered by the monitored application. APM error events are created only for PHP errors which level is included in PHP [`error_reporting`](https://www.php.net/manual/en/function.error-reporting.php) setting.
+
+In addition [`capture_errors`](/reference/configuration-reference.md#config-capture-errors) configuration option controls if the agent captures any PHP errors.
+
+
+## Duration format [configure-duration-format]
+
+The *duration* format is used for configuration options like timeouts. The units are provided as a suffix either directly after the number or separated by any amount of whitespace. The units are case insensitive so they can be provided in either lower, upper or even mixed case.
+
+**Supported units:**
+
+* `ms` (milliseconds)
+* `s` (seconds)
+* `m` (minutes)
+
+**Example:** `5m` (interpreted as 5 minutes) or `10 mS` (interpreted as 10 milliseconds).
+
+**Default units:** Each configuration option with value specifiying a duration has default units. This allows omitting the units in option value. For example if option’s default units are `s` (seconds) then value `10` is interpreted as 10 seconds.
+
+::::{note}
+Different configuration options might have different default units so it’s always preferable to provide units explicitly.
+::::
+
+
+
+## Size format [configure-size-format]
+
+The *size* format is used for options such as maximum buffer sizes. The units are provided as a suffix either directly after the number or separated by any amount of whitespace. The units are case insensitive so they can be provided in either lower, upper or even mixed case.
+
+**Supported units:**
+
+* B (bytes)
+* KB (kilobytes)
+* MB (megabytes)
+* GB (gigabytes)
+
+::::{note}
+We use the power-of-two sizing convention, e.g. 1KB = 1024B.
+::::
+
+
+**Example:** `34KB` (interpreted as 34 kilobytes) or `78 mB` (interpreted as 78 megabytes).
+
+**Default units:** Each configuration option with value specifiying a size has default units. This allows omitting the units in option value. For example if option’s default units are `KB` (kilobytes) then value `10` is interpreted as 10 kilobytes.
+
+::::{note}
+Different configuration options might have different default units so it’s always preferable to provide units explicitly.
+::::
+
+
+
+## Wildcard [configure-wildcard]
+
+Some options (for example [`url_groups`](/reference/configuration-reference.md#config-url-groups)) support use of wildcard. A valid value for such configuration options is a comma separated list of wildcard expressions. Only the wildcard `*`, which matches zero or more characters, is supported.
+
+Examples: `*foo*`, `/foo/*/bar, /*/baz*`.
+
+Matching is case insensitive by default. Prepending an element with `(?-i)` makes the matching case sensitive. For example `(?-i)/bar, /foo` matches `/bar` and `/FOO` but it doesn’t match `/BAR`. On the other hand `(?-i)/bar, (?-i)/foo` matches `/bar` and `/foo` but doesn’t match neither `/BAR` nor `/FOO`.
+
+Whitespace around commas separating wildcard expressions in the list is ignored. For example `foo , bar` is the same as `foo,bar`. On the other hand whitespace inside wildcard expressions is significant. For example `*a b*` matches a string only if it contains `a` followed by space and then `b`.
+
+The input string is matched against wildcard expressions in the order they are listed and the first expression that matches is selected.
+
+When configuration option is intended to matched against a input URL (for example [`url_groups`](/reference/configuration-reference.md#config-url-groups) and [`transaction_ignore_urls`](/reference/configuration-reference.md#config-transaction-ignore-urls)) only path part of the URL is tested against wildcard expressions. Other parts of the URL (such as query string, etc.) are not taken into account so including them in the wildcard expressions might lead to unexpected result. For example `/user/*` matches `http://my_site.com/user/Alice?lang=en` while `/user/*?lang=*` does not match `http://my_site.com/user/Alice?lang=en`
+
+
diff --git a/docs/reference/index.md b/docs/reference/index.md
new file mode 100644
index 000000000..514d8aa98
--- /dev/null
+++ b/docs/reference/index.md
@@ -0,0 +1,15 @@
+---
+mapped_pages:
+ - https://www.elastic.co/guide/en/apm/agent/php/current/intro.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/index.html
+---
+
+# APM PHP agent [intro]
+
+The Elastic APM PHP Agent measures the performance of your application and tracks errors. It is an extension that must be installed in your PHP environment.
+
+
+## Additional Components [additional-components]
+
+APM Agents work in conjunction with the [APM Server](docs-content://solutions/observability/apps/application-performance-monitoring-apm.md), [Elasticsearch](docs-content://get-started/index.md), and [Kibana](docs-content://get-started/the-stack.md). The [APM Guide](docs-content://solutions/observability/apps/application-performance-monitoring-apm.md) provides details on how these components work together, and provides a matrix outlining [Agent and Server compatibility](docs-content://solutions/observability/apps/apm-agent-compatibility.md).
+
diff --git a/docs/reference/public-api.md b/docs/reference/public-api.md
new file mode 100644
index 000000000..e46e597b0
--- /dev/null
+++ b/docs/reference/public-api.md
@@ -0,0 +1,573 @@
+---
+mapped_pages:
+ - https://www.elastic.co/guide/en/apm/agent/php/current/public-api.html
+---
+
+# Public API [public-api]
+
+The public API of the Elastic APM PHP agent lets you customize and manually create spans and transactions.
+
+* [ElasticApm](#api-elasticapm-class) - Public API entry point
+* [TransactionInterface](#api-transaction-interface)
+* [SpanInterface](#api-span-interface)
+* [Manual distributed tracing](#api-manual-distributed-tracing)
+
+
+## ElasticApm [api-elasticapm-class]
+
+This is the entry point of the public API. It allows to start transactions, gives you access to the current transaction, etc.
+
+To use the API, you invoke the static methods on the class `\Elastic\Apm\ElasticApm`.
+
+
+### `ElasticApm::beginCurrentTransaction` [api-elasticapm-class-begin-current-transaction]
+
+Begins a new transaction and sets it as the current transaction. Use this method to create a custom transaction. Note that when automatic instrumentation is used the agent begins a new transaction automatically whenever your application receives an incoming HTTP request so you only need to use this method to create custom transactions.
+
+::::{note}
+You must call [`TransactionInterface->end`](#api-transaction-interface-end) when the transaction has ended.
+::::
+
+
+The best practice is to use a `try`-`finally` block. For example:
+
+```php
+use Elastic\Apm\ElasticApm;
+
+$transaction = ElasticApm::beginCurrentTransaction(
+ 'transaction_name',
+ 'transaction_type'
+);
+try {
+ // do your thing ...
+} finally {
+ $transaction->end();
+}
+```
+
+See [TransactionInterface](#api-transaction-interface) on how to customize a transaction.
+
+
+### `ElasticApm::captureCurrentTransaction` [api-elasticapm-class-capture-current-transaction]
+
+This is a convenience API that ensures [`TransactionInterface->end`](#api-transaction-interface-end) is called when the transaction has ended. This API:
+
+* Begins a new transaction
+* Sets the new transaction as the current transaction
+* Executes the provided `callable` as the new transaction
+* Ends the new transaction
+* Returns the value returned by the provided `callable`
+
+For example:
+
+```php
+use Elastic\Apm\ElasticApm;
+use Elastic\Apm\TransactionInterface;
+
+ElasticApm::captureCurrentTransaction(
+ 'transaction_name',
+ 'transaction_type',
+ function (TransactionInterface $transaction) {
+ // do your thing...
+ }
+);
+```
+
+See [TransactionInterface](#api-transaction-interface) on how to customize a transaction.
+
+
+### `ElasticApm::getCurrentTransaction` [api-elasticapm-class-get-current-transaction]
+
+Returns the current transaction.
+
+```php
+use Elastic\Apm\ElasticApm;
+
+$transaction = ElasticApm::getCurrentTransaction();
+```
+
+See [TransactionInterface](#api-transaction-interface) on how to customize a transaction.
+
+
+## TransactionInterface [api-transaction-interface]
+
+A transaction describes an event captured by an Elastic APM agent monitoring a service. Transactions help combine multiple [Spans](#api-span-interface) into logical groups, and they are the first [Span](#api-span-interface) of a service. More information on Transactions and Spans is available in the [APM data model](docs-content://solutions/observability/apps/learn-about-application-data-types.md) documentation.
+
+See [`ElasticApm::getCurrentTransaction`](#api-elasticapm-class-get-current-transaction) on how to get a reference to the current transaction.
+
+
+### `TransactionInterface->getCurrentSpan` [api-transaction-interface-get-current-span]
+
+Returns the current span for this transaction.
+
+Example:
+
+```php
+$span = $transaction->getCurrentSpan();
+```
+
+
+### `TransactionInterface->beginCurrentSpan` [api-transaction-interface-begin-current-span]
+
+Begins a new span with the current span as the new span’s parent and sets the new span as the current span for this transaction. If this transaction’s doesn’t have the current span then the transaction itself is set as the new span’s parent.
+
+::::{note}
+You must call [`SpanInterface->end`](#api-span-interface-end) when the span has ended.
+::::
+
+
+The best practice is to use a `try`-`finally` block. For example:
+
+```php
+$span = $transaction->beginCurrentSpan(
+ 'span_name',
+ 'span_type',
+ 'span_sub-type', // optional
+ 'span_action' // optional
+);
+try {
+ // do your thing ...
+} finally {
+ $span->end();
+}
+```
+
+
+### `TransactionInterface->captureCurrentSpan` [api-transaction-interface-capture-current-span]
+
+This is a convenience API that ensures [`SpanInterface->end`](#api-span-interface-end) is called when the span has ended. This API
+
+* Begins a new span with this transaction’s current span as the new span’s parent and sets the new span as the current span for this transaction. If this transaction’s doesn’t have a current span then the transaction itself is set as the new span’s parent.
+* Executes the provided `callable` as the new span
+* Ends the new transaction
+* Returns the value returned by the provided `callable`
+
+For example:
+
+```php
+$parentSpan->captureCurrentSpan(
+ 'span_name',
+ 'span_type',
+ function (SpanInterface $childSpan) {
+ // do your thing...
+ },
+ 'span_sub-type', // optional
+ 'span_action' // optional
+);
+```
+
+
+### `TransactionInterface->beginChildSpan` [api-transaction-interface-begin-child-span]
+
+Begins a new span with this transaction as the new span’s parent.
+
+::::{note}
+You must call [`SpanInterface->end`](#api-span-interface-end) when the span has ended.
+::::
+
+
+The best practice is to use `try`-`finally` block. For example:
+
+```php
+$span = $transaction->beginChildSpan(
+ 'span_name',
+ 'span_type',
+ 'span_sub-type', // optional
+ 'span_action' // optional
+);
+try {
+ // do your thing ...
+} finally {
+ $span->end();
+}
+```
+
+
+### `TransactionInterface->captureChildSpan` [api-transaction-interface-capture-child-span]
+
+This is a convenience API that ensures [`SpanInterface->end`](#api-span-interface-end) is called when the span has ended. This API
+
+* Begins a new span with this transaction as the new span’s parent
+* Executes the provided `callable` as the new span and
+* Ends the new span
+* Returns the value returned by the provided `callable`
+
+For example:
+
+```php
+$transaction->captureChildSpan(
+ 'span_name',
+ 'span_type',
+ function (SpanInterface $span) {
+ // do your thing...
+ },
+ 'span_sub-type', // optional
+ 'span_action' // optional
+);
+```
+
+
+### `TransactionInterface->setName` [api-transaction-interface-set-name]
+
+Sets the name of the transaction. Transaction name is generic designation of a transaction in the scope of a single service (e.g., `GET /users/:id`).
+
+Example:
+
+```php
+$transaction->setName('GET /users/:id');
+```
+
+
+### `TransactionInterface->setType` [api-transaction-interface-set-type]
+
+Sets the type of the transaction. Transaction type is a keyword of specific relevance in the service’s domain. For example `request`, `backgroundjob`, etc.
+
+Example:
+
+```php
+$transaction->setType('my custom transaction type');
+```
+
+
+### `TransactionInterface->context()->setLabel` [api-transaction-interface-set-label]
+
+Sets a label by a key. Labels are a flat mapping of user-defined string keys and string, number, or boolean values.
+
+::::{note}
+The labels are indexed in Elasticsearch so that they are searchable and aggregatable. Take special care when using user provided data, like URL parameters, as a label key because it can lead to [Elasticsearch mapping explosion](docs-content://manage-data/data-store/mapping.md#mapping-limit-settings).
+::::
+
+
+Example:
+
+```php
+$transaction->context()->setLabel('my label with string value', 'some text');
+$transaction->context()->setLabel('my label with int value', 123);
+$transaction->context()->setLabel('my label with float value', 4.56);
+```
+
+
+### `TransactionInterface->getId` [api-transaction-interface-get-id]
+
+Gets the ID of the transaction. Transaction ID is a hex encoded 64 random bits (== 8 bytes == 16 hex digits) ID.
+
+If this transaction represents a noop, this method returns an unspecified dummy ID.
+
+Example:
+
+```php
+$transactionId = $transaction->getId();
+```
+
+
+### `TransactionInterface->getTraceId` [api-transaction-interface-get-trace-id]
+
+Gets the trace ID of the transaction. Trace ID is a hex encoded 128 random bits (== 16 bytes == 32 hex digits) ID of the correlated trace.
+
+The trace ID is consistent across all transactions and spans which belong to the same logical trace, even for transactions and spans which happened in another service (given this service is also monitored by Elastic APM).
+
+If this transaction represents a noop, this method returns an unspecified dummy ID.
+
+Example:
+
+```php
+$traceId = $transaction->getTraceId();
+```
+
+
+### `TransactionInterface->getParentId` [api-transaction-interface-get-parent-id]
+
+Gets ID of the parent transaction or span.
+
+See [`TransactionInterface->getId`](#api-transaction-interface-get-id) and [`SpanInterface->getId`](#api-span-interface-get-id).
+
+The root transaction of a trace does not have a parent, so `null` is returned.
+
+If this transaction represents a noop, this method returns an unspecified dummy ID.
+
+Example:
+
+```php
+$parentId = $transaction->getParentId();
+```
+
+
+### `TransactionInterface->ensureParentId()` [api-transaction-interface-ensure-parent-id]
+
+If the transaction does not have a parent-ID yet, calling this method generates a new ID, sets it as the parent-ID of this transaction, and returns it as a `string`.
+
+This enables the correlation of the spans the JavaScript Real User Monitoring (RUM) agent creates for the initial page load with the transaction of the backend service. If your backend service generates the HTML page dynamically, initializing the JavaScript RUM agent with the value of this method allows analyzing the time spent in the browser vs in the backend services.
+
+An example of using this API in Laravel application can be found at [https://github.com/elastic/opbeans-php/](https://github.com/elastic/opbeans-php/).
+
+Add `isElasticApmEnabled`, `elasticApmCurrentTransaction` properties to the view ([see the relevant part in opbeans-php’s `AppServiceProvider.php`](https://github.com/elastic/opbeans-php/blob/22df4af76a879d8ce7237d90e953e312fb98e792/app/Providers/AppServiceProvider.php#L33)) and add a snippet similar to the following one to the body of your HTML page, preferably before other JS libraries ([see opbeans-php’s `rendered_by_frontend.blade.php`](https://github.com/elastic/opbeans-php/blob/22df4af76a879d8ce7237d90e953e312fb98e792/resources/views/rendered_by_frontend.blade.php)) :
+
+```html
+@if ($isElasticApmEnabled)
+
+@endif
+```
+
+See the [JavaScript RUM agent documentation](apm-agent-rum-js://docs/reference/index.md) for more information.
+
+
+### `TransactionInterface->setResult` [api-transaction-interface-set-result]
+
+Sets the result of the transaction.
+
+Transaction result is optional and can be set to `null`. For HTTP-related transactions, the result is HTTP status code formatted like `HTTP 2xx`.
+
+Example:
+
+```php
+$transaction->setResult('my custom transaction result');
+```
+
+
+### `TransactionInterface->end` [api-transaction-interface-end]
+
+Ends the transaction and queues it to be reported to the APM Server.
+
+It is illegal to call any mutating methods (for example any `set...` method is a mutating method) on a transaction instance which has already ended.
+
+Example:
+
+```php
+$transaction->end();
+```
+
+
+## SpanInterface [api-span-interface]
+
+A span contains information about a specific code path, executed as part of a transaction.
+
+If for example a database query happens within a recorded transaction, a span representing this database query may be created. In such a case the name of the span will contain information about the query itself, and the type will hold information about the database type.
+
+See [`TransactionInterface->getCurrentSpan`](#api-transaction-interface-get-current-span) on how to get the current span.
+
+
+### `SpanInterface->setName` [api-span-interface-set-name]
+
+Sets the name of the span. Span name is generic designation of a span in the scope of a transaction.
+
+Example:
+
+```php
+$span->setName('SELECT FROM customer');
+```
+
+
+### `SpanInterface->setType` [api-span-interface-set-type]
+
+Sets the type of the span. Span type is a keyword of specific relevance in the service’s domain. For example `db`, `external`, etc.
+
+Example:
+
+```php
+$span->setType('my custom span type');
+```
+
+
+### `SpanInterface->setSubtype` [api-span-interface-set-subtype]
+
+Sets the sub-type of the span. Span sub-type is a further sub-division of the type. For example, `mysql`, `postgresql`, or `elasticsearch` for the type `db`, `http` for the type `external`, etc.
+
+Span sub-type is optional and can be set to `null`. Span sub-type default value is `null`.
+
+Example:
+
+```php
+$span->setSubtype('my custom span sub-type');
+```
+
+
+### `SpanInterface->setAction` [api-span-interface-set-action]
+
+Sets the action of the span. Span action is the specific kind of event within the sub-type represented by the span. For example `query` for type/sub-type `db`/`mysql`, `connect` for type/sub-type `db`/`cassandra`, etc.
+
+Span action is optional and can be set to `null`. Span action default value is `null`.
+
+Example:
+
+```php
+$span->setAction('my custom span action');
+```
+
+
+### `SpanInterface->context()->setLabel` [api-span-interface-set-label]
+
+Sets a label by a key. Labels are a flat mapping of user-defined string keys and string, number, or boolean values.
+
+::::{note}
+The labels are indexed in Elasticsearch so that they are searchable and aggregatable. Take special care when using user provided data, like URL parameters, as a label key because it can lead to [Elasticsearch mapping explosion](docs-content://manage-data/data-store/mapping.md#mapping-limit-settings).
+::::
+
+
+Example:
+
+```php
+$span->context()->setLabel('my label with string value', 'some text');
+$span->context()->setLabel('my label with int value', 123);
+$span->context()->setLabel('my label with float value', 4.56);
+```
+
+
+### `SpanInterface->getId` [api-span-interface-get-id]
+
+Gets the ID of the span. Span ID is a hex encoded 64 random bits (== 8 bytes == 16 hex digits) ID.
+
+If this span represents a noop, this method returns an unspecified dummy ID.
+
+Example:
+
+```php
+$spanId = $span->getId();
+```
+
+
+### `SpanInterface->getTraceId` [api-span-interface-get-trace-id]
+
+Gets the trace ID of the span. Trace ID is a hex encoded 128 random bits (== 16 bytes == 32 hex digits) ID of the correlated trace.
+
+The trace ID is consistent across all transactions and spans which belong to the same logical trace, even for transactions and spans which happened in another service (given this service is also monitored by Elastic APM).
+
+If this span represents a noop, this method returns an unspecified dummy ID.
+
+Example:
+
+```php
+$traceId = $span->getTraceId();
+```
+
+
+### `SpanInterface->getTransactionId` [api-span-interface-get-transaction-id]
+
+Gets ID of the correlated transaction. See [`TransactionInterface->getId`](#api-transaction-interface-get-id).
+
+If this span represents a noop, this method returns an unspecified dummy ID.
+
+Example:
+
+```php
+$transactionId = $span->getTransactionId();
+```
+
+
+### `SpanInterface->getParentId` [api-span-interface-get-parent-id]
+
+Gets ID of the parent transaction or span. If this span is the root span of the correlated transaction then its parent is the correlated transaction, otherwise, its parent is the parent span. See [`TransactionInterface->getId`](#api-transaction-interface-get-id) and [`SpanInterface->getId`](#api-span-interface-get-id).
+
+If this span represents a noop, this method returns an unspecified dummy ID.
+
+Example:
+
+```php
+$parentId = $span->getParentId();
+```
+
+
+### `SpanInterface->beginChildSpan` [api-span-interface-begin-child-span]
+
+Begins a new span with this span as the new span’s parent.
+
+::::{note}
+You must call [`SpanInterface->end`](#api-span-interface-end) when the span has ended.
+::::
+
+
+The best practice is to use a `try`-`finally` block. For example:
+
+```php
+$childSpan = $parentSpan->beginChildSpan(
+ 'span_name',
+ 'span_type',
+ 'span_sub-type', // optional
+ 'span_action' // optional
+);
+try {
+ // do your thing ...
+} finally {
+ $childSpan->end();
+}
+```
+
+
+### `SpanInterface->captureChildSpan` [api-span-interface-capture-child-span]
+
+This is a convenience API that ensures [`SpanInterface->end`](#api-span-interface-end) is called when the span has ended. This API
+
+* Begins a new span with this span as the new span’s parent
+* Executes the provided `callable` as the new span
+* Ends the new span
+* Returns the value returned by the provided `callable`
+
+For example:
+
+```php
+$parentSpan->captureChildSpan(
+ 'span_name',
+ 'span_type',
+ function (SpanInterface $childSpan) {
+ // do your thing...
+ },
+ 'span_sub-type', // optional
+ 'span_action' // optional
+);
+```
+
+
+### `SpanInterface->end` [api-span-interface-end]
+
+Ends the span and queues it to be reported to the APM Server.
+
+It is illegal to call any mutating methods (for example any `set...` method is a mutating method) on a span instance which has already ended.
+
+Example:
+
+```php
+$span->end();
+```
+
+
+## Manual distributed tracing [api-manual-distributed-tracing]
+
+Elastic APM PHP agent automatically propagates distributed tracing context for [supported technologies](/reference/supported-technologies.md). If your service communicates over a different, unsupported protocol, you can manually propagate distributed tracing context from a sending service to a receiving service using the agent’s API.
+
+Distributed tracing data consists of multiple key-value pairs. For example for HTTP protocol these pairs are passed as request headers.
+
+At the sending service you must add key-value pairs to the outgoing request. Use `injectDistributedTracingHeaders()` API to get the distributed tracing data from the corresponding instance of [SpanInterface](#api-span-interface) or [TransactionInterface](#api-transaction-interface)
+
+For example assuming the outgoing request is associated with `$span` :
+
+```php
+$span->injectDistributedTracingHeaders(
+ function (string $headerName, string $headerValue) use ($myRequest): void {
+ $myRequest->addHeader($headerName, $headerValue);
+ }
+);
+```
+
+At the receiving service you must pass key-value pairs from the sending side to `ElasticApm::newTransaction` API.
+
+Example:
+
+```php
+$myTransaction = ElasticApm::newTransaction('my TX name', 'my TX type')
+ ->distributedTracingHeaderExtractor(
+ function (string $headerName) use ($myRequest): ?string {
+ return $myRequest->hasHeader($headerName)
+ ? $myRequest->getHeader($headerName)
+ : null;
+ }
+ )->begin();
+```
+
diff --git a/docs/reference/set-up-apm-php-agent.md b/docs/reference/set-up-apm-php-agent.md
new file mode 100644
index 000000000..43e59fefe
--- /dev/null
+++ b/docs/reference/set-up-apm-php-agent.md
@@ -0,0 +1,113 @@
+---
+mapped_pages:
+ - https://www.elastic.co/guide/en/apm/agent/php/current/setup.html
+---
+
+# Set up the APM PHP Agent [setup]
+
+
+## Prerequisites [setup-prerequisites]
+
+
+### Operating system and architecture [_operating_system_and_architecture]
+
+We officially support Linux systems (glibc, deb and rpm packages) and Alpine Linux (musl libc - apk packages) for x86_64 (AMD64) processors.
+
+::::{note}
+Experimentally, we also provide packages for the ARM64 architecture - please note that these packages have not been fully tested.
+::::
+
+
+
+### PHP [_php]
+
+The agent supports PHP versions 7.2-8.4.
+
+
+### curl [_curl]
+
+The agent requires `libcurl` 7.58 or later.
+
+
+## Installation [setup-installation]
+
+Install the agent using one of the [packages for supported platforms](https://github.com/elastic/apm-agent-php/releases/latest).
+
+
+### Using RPM package (RHEL/CentOS, Fedora) [setup-rpm]
+
+```bash
+rpm -ivh .rpm
+```
+
+
+### Using DEB package (Debian, Ubuntu 18+) [setup-deb]
+
+```bash
+dpkg -i .deb
+```
+
+
+### Using APK package (Alpine) [setup-apk]
+
+```bash
+apk add --allow-untrusted .apk
+```
+
+
+### Build from source [build-from-source]
+
+If you can’t find your distribution, you can install the agent by building it from the source. The following instructions will build the APM agent using the same docker environment that Elastic uses to build our official packages.
+
+::::{note}
+The agent is currently only available for Linux operating system.
+::::
+
+
+1. Download the agent source from [https://github.com/elastic/apm-agent-php/](https://github.com/elastic/apm-agent-php/).
+2. Execute the following commands to build the agent and install it:
+
+```bash
+cd apm-agent-php
+# for linux glibc - libc distributions (Ubuntu, Redhat, etc)
+export BUILD_ARCHITECTURE=linux-x86-64
+# for linux with musl - libc distributions (Alpine)
+export BUILD_ARCHITECTURE=linuxmusl-x86-64
+# provide a path to php-config tool
+export PHP_CONFIG=php-config
+
+# build extensions
+make -f .ci/Makefile build
+
+# run extension tests
+PHP_VERSION=`$PHP_CONFIG --version | cut -d'.' -f 1,2` make -f .ci/Makefile run-phpt-tests
+
+# install agent extensions
+sudo cp agent/native/_build/${BUILD_ARCHITECTURE}-release/ext/elastic_apm-*.so `$PHP_CONFIG --extension-dir`
+
+# install automatic loader
+sudo cp agent/native/_build/${BUILD_ARCHITECTURE}-release/loader/code/elastic_apm_loader.so `$PHP_CONFIG --extension-dir`
+```
+
+Enable the extension by adding the following to your `php.ini` file:
+
+```ini
+extension=elastic_apm_loader.so
+elastic_apm.bootstrap_php_part_file=/agent/php/bootstrap_php_part.php
+```
+
+To work, the agent needs both the built `elastic_apm-*.so` and the downloaded source files. So if you would like to build `elastic_apm-*.so` on one machine and then deploy it on a different machine, you will need to copy both the built `elastic_apm-*.so` and the downloaded source files.
+
+
+## Limitations [limitations]
+
+
+### `open_basedir` PHP configuration option [limitation-open_basedir]
+
+Please be aware that if the [`open_basedir`](https://www.php.net/manual/en/ini.core.php#ini.open-basedir) option is configured in your php.ini, the installation directory of the agent (by default `/opt/elastic/apm-agent-php`) must be located within a path included in the [`open_basedir`](https://www.php.net/manual/en/ini.core.php#ini.open-basedir) value. Otherwise, the agent will not be loaded correctly.
+
+
+### `Xdebug` stability and memory issues [limitation-xdebug]
+
+We strongly advise against running the agent alongside the xdebug extension. Using both extensions simultaneously can lead to stability issues in the instrumented application, such as memory leaks. It is highly recommended to disable xdebug, preferably by preventing it from loading in the `php.ini` configuration file.
+
diff --git a/docs/reference/supported-technologies.md b/docs/reference/supported-technologies.md
new file mode 100644
index 000000000..cce3faf2e
--- /dev/null
+++ b/docs/reference/supported-technologies.md
@@ -0,0 +1,62 @@
+---
+mapped_pages:
+ - https://www.elastic.co/guide/en/apm/agent/php/current/supported-technologies.html
+---
+
+# Supported technologies [supported-technologies]
+
+If the agent doesn’t support your favorite technology yet, you can vote for it by participating in [our survey](https://docs.google.com/forms/d/e/1FAIpQLSf8c3BJVMqaeuqpq-t3_Q4NilNcdsrzK1qJ4Qo9JpJslrmYzA/viewform). We will use the results to add support for the most requested technologies.
+
+
+## Operating systems [supported-os]
+
+We officially support Linux systems (glibc, deb and rpm packages) and Alpine Linux (musl libc - apk packages) for x86_64 (AMD64) processors. Experimentally, we also provide packages for the ARM64 architecture - please note that these packages have not been fully tested.
+
+
+## PHP versions [supported-php-versions]
+
+The agent supports PHP versions 7.2-8.4.
+
+
+## Unsupported PHP Server API’s (SAPI) [unsupported-php-sapis]
+
+Currenly we’re not supporting `phpdbg` - agent extension can be loaded but will remain non-functional
+
+
+## Web frameworks [supported-web-frameworks]
+
+Automatic instrumentation for a web framework means a transaction is automatically created for each incoming request and it is named after the registered route.
+
+We support automatic instrumentation for the following web frameworks.
+
+| Framework | Supported versions |
+| --- | --- |
+| Framework-less PHP application (i.e., application using PHP’s built in web support) | |
+| Laravel | 6, 7, 8, 9, 10 |
+| WordPress | 5, 6 |
+
+
+## Data access technologies [supported-data-access-technologies]
+
+We support automatic instrumentation for the following data access technologies.
+
+| Data access technology | Supported versions | Notes |
+| --- | --- | --- |
+| PHP Data Objects (PDO) | any version bundled with a supported PHP version | The agent automatically creates DB spans for all your PDO queries. This includes PDO queries executed by object relational mappers (ORM) like Doctrine & Eloquent. |
+| MySQLi | any version bundled with a supported PHP version | |
+
+
+## HTTP clients [supported-http-clients]
+
+Automatic instrumentation for an HTTP client technology means an HTTP span is automatically created for each outgoing HTTP request and distributed tracing headers are propagated. The spans are named after the schema ` `, for example `GET elastic.co`.
+
+| Framework | Supported versions |
+| --- | --- |
+| `curl` extension | |
+| `Guzzle` library | |
+
+
+## Capturing PHP errors as APM error events [supported-php-errors]
+
+The agent automatically creates APM error events for PHP errors triggered by the monitored application. See [PHP errors as APM error events](/reference/configuration.md#configure-php-error-reporting) for the relevant configuration settings.
+
diff --git a/docs/reference/toc.yml b/docs/reference/toc.yml
new file mode 100644
index 000000000..48c6b221c
--- /dev/null
+++ b/docs/reference/toc.yml
@@ -0,0 +1,12 @@
+project: 'APM PHP agent reference'
+toc:
+ - file: index.md
+ - file: set-up-apm-php-agent.md
+ # TO DO: Not available on master
+ # children:
+ # - file: _limitations.md
+ - file: supported-technologies.md
+ - file: configuration.md
+ children:
+ - file: configuration-reference.md
+ - file: public-api.md
\ No newline at end of file
diff --git a/docs/release-notes/index.md b/docs/release-notes/index.md
new file mode 100644
index 000000000..689b4dbbc
--- /dev/null
+++ b/docs/release-notes/index.md
@@ -0,0 +1,327 @@
+---
+navigation_title: "Elastic APM PHP Agent"
+mapped_pages:
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.13.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.12.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.11.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.10.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.9.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.9.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.8.4.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.8.3.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.8.2.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.8.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.8.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.7.2.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.7.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.7.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.6.2.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.6.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.6.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.5.2.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.5.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.5.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.4.2.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.4.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.4.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.3.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.3.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.2.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.0.1.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.0.html
+ - https://www.elastic.co/guide/en/apm/agent/php/current/release-notes-v1.0.0-beta1.html
+---
+
+# Elastic APM PHP Agent release notes [elastic-apm-php-agent-release-notes]
+
+Review the changes, fixes, and more in each version of Elastic APM PHP Agent.
+
+To check for security updates, go to [Security announcements for the Elastic stack](https://discuss.elastic.co/c/announcements/security-announcements/31).
+
+% Release notes includes only features, enhancements, and fixes. For breaking changes, deprecations, and known issues, create a separate page and at it to the applicable sections.
+
+% ## version.next [elastic-apm-php-agent-versionext-release-notes]
+% **Release date:** Month day, year
+
+% ### Features and enhancements [elastic-apm-php-agent-versionext-features-enhancements]
+
+% ### Fixes [elastic-apm-php-agent-versionext-fixes]
+
+## 1.15.0 [elastic-apm-php-agent-1150-release-notes]
+**Release date:** January 17, 2025
+
+### Features and enhancements [elastic-apm-php-agent-1150-features-enhancements]
+* Add php 8.4 compatibility #1255
+* Added warning log for Xdebug incompatibility [#1256](https://github.com/elastic/apm-agent-php/pull/1256) and [#1257](https://github.com/elastic/apm-agent-php/pull/1257)
+
+## 1.14.1 [elastic-apm-php-agent-1141-release-notes]
+**Release date:** January 5, 2025
+
+### Fixes [elastic-apm-php-agent-1141-fixes]
+* Fixed calling post hook if instrumented functions throws [#1223](https://github.com/elastic/apm-agent-php/pull/1223)
+
+## 1.14.0 [elastic-apm-php-agent-1140-release-notes]
+**Release date:** August 28, 2024
+
+### Features and enhancements [elastic-apm-php-agent-1140-features-enhancements]
+* Experimental support for ARM64 architecture
+
+### Fixes [elastic-apm-php-agent-1140-fixes]
+* Fixed issue causing forked process to hang or crash [#1213](https://github.com/elastic/apm-agent-php/pull/1213)
+
+## 1.13.2 [elastic-apm-php-agent-1132-release-notes]
+**Release date:** August 20, 2024
+
+### Fixes [elastic-apm-php-agent-1132-fixes]
+* FSet various PHP engine hooks only when the relevant feature is enabled [#1211](https://github.com/elastic/apm-agent-php/pull/1211)
+
+## 1.13.1 [elastic-apm-php-agent-1131-release-notes]
+**Release date:** July 23, 2024
+
+### Features and enhancements [elastic-apm-php-agent-1131-features-enhancements]
+* Fixed memory leak in exception handling [#1174](https://github.com/elastic/apm-agent-php/pull/1174)
+* Changed exprerimental part of WordPress instrumentation that is measuring latency impact by plugin to be disabled by default [#1181](https://github.com/elastic/apm-agent-php/pull/1181)
+
+## 1.13.0 [elastic-apm-php-agent-1130-release-notes]
+**Release date:** January 31, 2024
+
+### Features and enhancements [elastic-apm-php-agent-1130-features-enhancements]
+* Added support for PHP 8.3 [#1127](https://github.com/elastic/apm-agent-php/pull/1127)
+
+### Fixes [elastic-apm-php-agent-1130-fixes]
+* Fixed resetting state for forks [#1125](https://github.com/elastic/apm-agent-php/pull/1125)
+
+## 1.12.0 [elastic-apm-php-agent-1120-release-notes]
+**Release date:** January 15, 2024
+
+### Features and enhancements [elastic-apm-php-agent-1120-features-enhancements]
+* Removed limitation that required to reinstall the agent after PHP upgrade [#1115](https://github.com/elastic/apm-agent-php/pull/#1115)
+* Fixed "malformed UTF-8 characters" issue [#1120](https://github.com/elastic/apm-agent-php/pull/#1120)
+
+## 1.11.0 [elastic-apm-php-agent-1110-release-notes]
+**Release date:** January 4, 2024
+
+### Features and enhancements [elastic-apm-php-agent-1110-features-enhancements]
+* Debug option to collect diagnostic information from PHP worker process [#1065](https://github.com/elastic/apm-agent-php/pull/#1065)
+* Enable background (non-blocking) communication with APM Server for any SAPI by default [#1079](https://github.com/elastic/apm-agent-php/pull/#1079)
+* Sending metadata.system.architecture and platform [#1083](https://github.com/elastic/apm-agent-php/pull/#1083)
+
+### Fixes [elastic-apm-php-agent-1110-fixes]
+* Improved packaging script to support other architectures and fixed package naming for x86-64 architecture [#1067](https://github.com/elastic/apm-agent-php/pull/#1067)
+* Fixed exception handling by improving memory allocation and proper exception object copy [#1076](https://github.com/elastic/apm-agent-php/pull/#1076)
+* Fixed building of APM server connection string [#1080](https://github.com/elastic/apm-agent-php/pull/#1080)
+* Allow using environment variables passed via FastCGI for agent configuration [#1113](https://github.com/elastic/apm-agent-php/pull/#1113)
+
+## 1.10.0 [elastic-apm-php-agent-1110-release-notes]
+**Release date:** September 12, 2023
+
+### Features and enhancements [elastic-apm-php-agent-1100-features-enhancements]
+* Preview of inferred spans feature. It needs to be enabled manually, please refer to documentation [`profiling_inferred_spans_enabled`](/reference/configuration-reference.md#config-profiling-inferred-spans-enabled) [#1038](https://github.com/elastic/apm-agent-php/pull/#1038)
+
+### Fixes [elastic-apm-php-agent-1100-fixes]
+* Detection and logging if agent source code doesn’t comply open_basedir limitation [#1044](https://github.com/elastic/apm-agent-php/pull/#1044)
+
+## 1.9.1 [elastic-apm-php-agent-191-release-notes]
+**Release date:** July 6, 2023
+
+### Features and enhancements [elastic-apm-php-agent-191-features-enhancements]
+* Added configuration option: GLOBAL_LABELS [#1007](https://github.com/elastic/apm-agent-php/pull/#1007)
+* Introduced new C++ build environment [#985](https://github.com/elastic/apm-agent-php/pull/#985)
+
+### Fixes [elastic-apm-php-agent-191-fixes]
+* Suppress errors and warnings when internally calling opcache_get_status [#1013](https://github.com/elastic/apm-agent-php/pull/#1013)
+
+## 1.9.0 [elastic-apm-php-agent-190-release-notes]
+**Release date:** June 22, 2023
+
+### Features and enhancements [elastic-apm-php-agent-190-features-enhancements]
+* Added container ID detection [#966](https://github.com/elastic/apm-agent-php/pull/966)
+* Extended span compression support to spans without service target [#944](https://github.com/elastic/apm-agent-php/pull/944)
+* Added auto-instrumentation for capturing WordPress filters/actions callbacks and the active theme [#948](https://github.com/elastic/apm-agent-php/pull/948)
+* Added configuration option STACK_TRACE_LIMIT [#995](https://github.com/elastic/apm-agent-php/pull/995)
+* Added SPAN_STACK_TRACE_MIN_DURATION configuration option [#996](https://github.com/elastic/apm-agent-php/pull/996)
+* Implemented backoff on failure in communication to APM Server [#999](https://github.com/elastic/apm-agent-php/pull/999)
+
+### Fixes [elastic-apm-php-agent-190-fixes]
+* Fixed not cleaning up connection data in sync backend comm. mode [#957](https://github.com/elastic/apm-agent-php/pull/957)
+* Fixed crash when [`opcache_reset()`](https://www.php.net/manual/en/function.opcache-reset.php) is used [#1000](https://github.com/elastic/apm-agent-php/pull/1000)
+
+## 1.8.4 [elastic-apm-php-agent-184-release-notes]
+**Release date:** May 17, 2023
+
+### Fixes [elastic-apm-php-agent-184-fixes]
+* Fixed deadlock caused by use of pthread_atfork [#964](https://github.com/elastic/apm-agent-php/pull/964)
+* Fixed verify_server_cert=false not disabling all the checks related to HTTPS certificate [#965](https://github.com/elastic/apm-agent-php/pull/965)
+* Fixed not joining background sender thread if there was fork after module init [#959](https://github.com/elastic/apm-agent-php/pull/959)
+
+## 1.8.3 [elastic-apm-php-agent-183-release-notes]
+**Release date:** April 21, 2023
+
+### Fixes [elastic-apm-php-agent-183-fixes]
+* Fixed issue with missing transaction details on some setups [#916](https://github.com/elastic/apm-agent-php/pull/916)
+
+## 1.8.2 [elastic-apm-php-agent-182-release-notes]
+**Release date:** April 12, 2023
+
+### Fixes [elastic-apm-php-agent-182-fixes]
+* Fixed agent issue causing PHP to crash when opcache preload feature was enabled [#913](https://github.com/elastic/apm-agent-php/pull/913)
+
+## 1.8.1 [elastic-apm-php-agent-181-release-notes]
+**Release date:** March 9, 2023
+
+### Fixes [elastic-apm-php-agent-181-fixes]
+* Fix for the agent causing very high CPU usage because it’s creating frequent connections to Elastic APM Server [#877](https://github.com/elastic/apm-agent-php/pull/877)
+
+## 1.8.0 [elastic-apm-php-agent-180-release-notes]
+**Release date:** February 27, 2023
+
+### Features and enhancements [elastic-apm-php-agent-180-features-enhancements]
+* Added support for PHP 8.2 [#868](https://github.com/elastic/apm-agent-php/pull/868)
+
+## 1.7.2 [elastic-apm-php-agent-172-release-notes]
+**Release date:** February 24, 2023
+
+### Fixes [elastic-apm-php-agent-172-fixes]
+* Fixed: case when process fork happens during request processing [#857](https://github.com/elastic/apm-agent-php/pull/857)
+
+## 1.7.1 [elastic-apm-php-agent-171-release-notes]
+**Release date:** January 16, 2023
+
+### Fixes [elastic-apm-php-agent-171-fixes]
+* Fixed: php apm segfaults on a zend error/php warning [#834](https://github.com/elastic/apm-agent-php/pull/834)
+
+## 1.7.0 [elastic-apm-php-agent-170-release-notes]
+**Release date:** October 13, 2022
+
+### Features and enhancements [elastic-apm-php-agent-170-features-enhancements]
+* Added support for automatically capturing MySQLi: [#688](https://github.com/elastic/apm-agent-php/pull/688)
+
+### Fixes [elastic-apm-php-agent-170-fixes]
+* Fixed: Inferred spans when used with Laravel: [#796](https://github.com/elastic/apm-agent-php/pull/796)
+* Fixed: CustomErrorData not found issue: [#797](https://github.com/elastic/apm-agent-php/pull/797)
+
+## 1.6.2 [elastic-apm-php-agent-162-release-notes]
+**Release date:** November 17, 2022
+
+### Features and enhancements [elastic-apm-php-agent-162-features-enhancements]
+* Backported support for automatically capturing MySQLi: [#688](https://github.com/elastic/apm-agent-php/pull/688)
+
+## 1.6.1 [elastic-apm-php-agent-161-release-notes]
+**Release date:** September 12, 2022
+
+### Fixes [elastic-apm-php-agent-161-fixes]
+* Fixed: Current implementation for Improved Granularity for SQL Databases doesn’t account for SQL USE statement: [#759](https://github.com/elastic/apm-agent-php/pull/759)
+
+## 1.6.0 [elastic-apm-php-agent-160-release-notes]
+**Release date:** August 22, 2022
+
+### Features and enhancements [elastic-apm-php-agent-160-features-enhancements]
+* Added inferred spans to automatically detect slow functions (as an experimental feature disabled by default): [#731](https://github.com/elastic/apm-agent-php/pull/731)
+* Improved granularity for SQL databases: [#732](https://github.com/elastic/apm-agent-php/pull/732)
+* Implemented default type for transactions and spans: [#733](https://github.com/elastic/apm-agent-php/pull/733)
+* Implemented support for Dependencies table: [#748](https://github.com/elastic/apm-agent-php/pull/748)
+* Improved transaction name for Laravel’s `artisan` command - now includes the first argument: [#714](https://github.com/elastic/apm-agent-php/pull/714)
+
+## 1.5.2 [elastic-apm-php-agent-152-release-notes]
+**Release date:** June 20, 2022
+
+### Fixes [elastic-apm-php-agent-152-fixes]
+* Fixed bug: Agent destroys error code for curl calls: [#707](https://github.com/elastic/apm-agent-php/pull/707)
+
+## 1.5.1 [elastic-apm-php-agent-151-release-notes]
+**Release date:** May 30, 2022
+
+### Fixes [elastic-apm-php-agent-151-fixes]
+* Fixed bug: Forked process runs indefinitely: [#691](https://github.com/elastic/apm-agent-php/pull/691)
+
+## 1.5.0 [elastic-apm-php-agent-150-release-notes]
+**Release date:** March 29, 2022
+
+### Features and enhancements [elastic-apm-php-agent-150-features-enhancements]
+* Added support for PHP 8.1: [#604](https://github.com/elastic/apm-agent-php/pull/604)
+
+## 1.4.2 [elastic-apm-php-agent-142-release-notes]
+**Release date:** February 17, 2022
+
+### Features and enhancements [elastic-apm-php-agent-142-features-enhancements]
+* Create error events only for PHP error types included in [`error_reporting()`](https://www.php.net/manual/en/function.error-reporting.php): [#625](https://github.com/elastic/apm-agent-php/pull/625)
+
+## 1.4.1 [elastic-apm-php-agent-141-release-notes]
+**Release date:** February 14, 2022
+
+### Fixes [elastic-apm-php-agent-141-fixes]
+* Fixed error events not being created for PHP errors: [#619](https://github.com/elastic/apm-agent-php/pull/619)
+
+## 1.4.0 [elastic-apm-php-agent-140-release-notes]
+**Release date:** January 10, 2022
+
+### Features and enhancements [elastic-apm-php-agent-140-features-enhancements]
+* Background (non-blocking) communication with APM Server: [#584](https://github.com/elastic/apm-agent-php/pull/584)
+
+## 1.3.1 [elastic-apm-php-agent-131-release-notes]
+**Release date:** October 18, 2021
+
+### Features and enhancements [elastic-apm-php-agent-131-features-enhancements]
+* DISABLE_SEND configuration option: [#559](https://github.com/elastic/apm-agent-php/pull/559)
+* DISABLE_INSTRUMENTATIONS configuration option: [#565](https://github.com/elastic/apm-agent-php/pull/565)
+* DEV_INTERNAL configuration option: [#566](https://github.com/elastic/apm-agent-php/pull/566)
+
+## 1.3.0 [elastic-apm-php-agent-130-release-notes]
+**Release date:** September 1, 2021
+
+### Features and enhancements [elastic-apm-php-agent-130-features-enhancements]
+* SERVICE_NODE_NAME configuration option: [#458](https://github.com/elastic/apm-agent-php/pull/458)
+* URL_GROUPS configuration option: [#537](https://github.com/elastic/apm-agent-php/pull/537)
+
+## 1.2.0 [elastic-apm-php-agent-120-release-notes]
+**Release date:** June 29, 2021
+
+### Features and enhancements [elastic-apm-php-agent-120-features-enhancements]
+* Collecting data for `Error rate` chart: [#441](https://github.com/elastic/apm-agent-php/pull/441)
+* HOSTNAME configuration option: [#440](https://github.com/elastic/apm-agent-php/pull/440)
+* Collecting data for `Time spent by span type` chart: [#436](https://github.com/elastic/apm-agent-php/pull/436)
+* `ensureParentId()` API: [#431](https://github.com/elastic/apm-agent-php/pull/431)
+
+### Fixes [elastic-apm-php-agent-120-fixes]
+* Fixed missing subtype and action for DB spans and DB not showing on `Service Map`: [#443](https://github.com/elastic/apm-agent-php/pull/443)
+
+## 1.1.0 [elastic-apm-php-agent-110-release-notes]
+**Release date:** June 1, 2021
+
+### Features and enhancements [elastic-apm-php-agent-110-features-enhancements]
+* Support for PHP 8.0: [#365](https://github.com/elastic/apm-agent-php/pull/365)
+* Support for Central (AKA Remote) Agents Configuration [#134](https://github.com/elastic/apm-agent-php/pull/134)
+
+## 1.0.1 [elastic-apm-php-agent-101-release-notes]
+**Release date:** April 1, 2021
+
+### Fixes [elastic-apm-php-agent-101-fixes]
+* Fixed missing query string: [#390](https://github.com/elastic/apm-agent-php/pull/390)
+* Fixed $_SERVER not set when auto_globals_jit = On: [#392](https://github.com/elastic/apm-agent-php/pull/392)
+
+## 1.0.0 [elastic-apm-php-agent-100-release-notes]
+**Release date:** March 23, 2021
+
+### Features and enhancements [elastic-apm-php-agent-100-features-enhancements]
+* Added support for distributed tracing: [#283](https://github.com/elastic/apm-agent-php/pull/283)
+* Added Error events: [#282](https://github.com/elastic/apm-agent-php/pull/282)
+* Add support for TRANSACTION_MAX_SPANS configuration option : [#260](https://github.com/elastic/apm-agent-php/pull/260)
+* Added SERVER_TIMEOUT configuration option: [#245](https://github.com/elastic/apm-agent-php/pull/245)
+* Automatically capture stack trace for spans: [#232](https://github.com/elastic/apm-agent-php/pull/232)
+* Added VERIFY_SERVER_CERT configuration option: [#225](https://github.com/elastic/apm-agent-php/pull/225)
+* Implemented sampling (TRANSACTION_SAMPLE_RATE): [#216](https://github.com/elastic/apm-agent-php/pull/216)
+
+### Fixes [elastic-apm-php-agent-100-fixes]
+* Small fixes to examples in docs: [#355](https://github.com/elastic/apm-agent-php/pull/355)
+* Exclude query string from a transaction name: [#285](https://github.com/elastic/apm-agent-php/pull/285)
+* Added check that the corresponding extension is loaded before instrumenting it: [#228](https://github.com/elastic/apm-agent-php/pull/228)
+
+
+
+
+
+
+
+
diff --git a/docs/release-notes/known-issues.md b/docs/release-notes/known-issues.md
new file mode 100644
index 000000000..4a520b6e8
--- /dev/null
+++ b/docs/release-notes/known-issues.md
@@ -0,0 +1,20 @@
+---
+navigation_title: "Elastic APM PHP Agent"
+
+---
+
+# Elastic APM PHP Agent known issues [elastic-apm-php-agent-known-issues]
+
+% Use the following template to add entries to this page.
+
+% :::{dropdown} Title of known issue
+% **Details**
+% On [Month/Day/Year], a known issue was discovered that [description of known issue].
+
+% **Workaround**
+% Workaround description.
+
+% **Resolved**
+% On [Month/Day/Year], this issue was resolved.
+
+:::
\ No newline at end of file
diff --git a/docs/release-notes/toc.yml b/docs/release-notes/toc.yml
new file mode 100644
index 000000000..3bbe7c829
--- /dev/null
+++ b/docs/release-notes/toc.yml
@@ -0,0 +1,3 @@
+toc:
+ - file: index.md
+ - file: known-issues.md
\ No newline at end of file