CINXE.COM

TCP Stream v2 | Spire Maritime Documentation

<!doctype html><html class="no-js " lang="en"><head><meta charset="utf-8"><title>TCP Stream v2 | Spire Maritime Documentation</title><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="preconnect" href="https://fonts.gstatic.com"><link rel="preconnect" href="https://cdn.jsdelivr.net"><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /><link rel="canonical" href="https://documentation.spire.com/tcp-stream-v2/" /><meta property="og:locale" content="en_US" /><meta property="og:type" content="article" /><meta property="og:title" content="TCP Stream v2 | Spire Maritime Documentation" /><meta property="og:description" content="Spire Maritime&#8217;s TCP Stream provides AIS Data in NMEA format like shown in the next section. This service has been re-developed to scale for performance with the continually expanding data volumes of the Spire AIS service. Our data volumes have grown around 300% in the last 2 years and our Satellite AIS data volumes have [&hellip;]" /><meta property="og:url" content="https://documentation.spire.com/tcp-stream-v2/" /><meta property="og:site_name" content="Spire Maritime Documentation" /><meta property="article:publisher" content="https://www.facebook.com/satelliteaisdata/" /><meta property="article:modified_time" content="2022-11-24T16:48:56+00:00" /><meta property="og:image" content="https://documentation.spire.com/wp-content/uploads/2022/10/spire-maritime-docs.jpg" /><meta property="og:image:width" content="1500" /><meta property="og:image:height" content="500" /><meta property="og:image:type" content="image/jpeg" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:site" content="@aisdata" /><meta name="twitter:label1" content="Est. reading time" /><meta name="twitter:data1" content="1 minute" /><style media="all">img:is([sizes="auto" i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}:root{--wp--preset--aspect-ratio--square:1;--wp--preset--aspect-ratio--4-3:4/3;--wp--preset--aspect-ratio--3-4:3/4;--wp--preset--aspect-ratio--3-2:3/2;--wp--preset--aspect-ratio--2-3:2/3;--wp--preset--aspect-ratio--16-9:16/9;--wp--preset--aspect-ratio--9-16:9/16;--wp--preset--color--black:#000;--wp--preset--color--cyan-bluish-gray:#abb8c3;--wp--preset--color--white:#fff;--wp--preset--color--pale-pink:#f78da7;--wp--preset--color--vivid-red:#cf2e2e;--wp--preset--color--luminous-vivid-orange:#ff6900;--wp--preset--color--luminous-vivid-amber:#fcb900;--wp--preset--color--light-green-cyan:#7bdcb5;--wp--preset--color--vivid-green-cyan:#00d084;--wp--preset--color--pale-cyan-blue:#8ed1fc;--wp--preset--color--vivid-cyan-blue:#0693e3;--wp--preset--color--vivid-purple:#9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple:linear-gradient(135deg,rgba(6,147,227,1) 0%,#9b51e0 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan:linear-gradient(135deg,#7adcb4 0%,#00d082 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange:linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red:linear-gradient(135deg,rgba(255,105,0,1) 0%,#cf2e2e 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray:linear-gradient(135deg,#eee 0%,#a9b8c3 100%);--wp--preset--gradient--cool-to-warm-spectrum:linear-gradient(135deg,#4aeadc 0%,#9778d1 20%,#cf2aba 40%,#ee2c82 60%,#fb6962 80%,#fef84c 100%);--wp--preset--gradient--blush-light-purple:linear-gradient(135deg,#ffceec 0%,#9896f0 100%);--wp--preset--gradient--blush-bordeaux:linear-gradient(135deg,#fecda5 0%,#fe2d2d 50%,#6b003e 100%);--wp--preset--gradient--luminous-dusk:linear-gradient(135deg,#ffcb70 0%,#c751c0 50%,#4158d0 100%);--wp--preset--gradient--pale-ocean:linear-gradient(135deg,#fff5cb 0%,#b6e3d4 50%,#33a7b5 100%);--wp--preset--gradient--electric-grass:linear-gradient(135deg,#caf880 0%,#71ce7e 100%);--wp--preset--gradient--midnight:linear-gradient(135deg,#020381 0%,#2874fc 100%);--wp--preset--font-size--small:13px;--wp--preset--font-size--medium:20px;--wp--preset--font-size--large:36px;--wp--preset--font-size--x-large:42px;--wp--preset--spacing--20:.44rem;--wp--preset--spacing--30:.67rem;--wp--preset--spacing--40:1rem;--wp--preset--spacing--50:1.5rem;--wp--preset--spacing--60:2.25rem;--wp--preset--spacing--70:3.38rem;--wp--preset--spacing--80:5.06rem;--wp--preset--shadow--natural:6px 6px 9px rgba(0,0,0,.2);--wp--preset--shadow--deep:12px 12px 50px rgba(0,0,0,.4);--wp--preset--shadow--sharp:6px 6px 0px rgba(0,0,0,.2);--wp--preset--shadow--outlined:6px 6px 0px -3px rgba(255,255,255,1),6px 6px rgba(0,0,0,1);--wp--preset--shadow--crisp:6px 6px 0px rgba(0,0,0,1)}:where(.is-layout-flex){gap:.5em}:where(.is-layout-grid){gap:.5em}body .is-layout-flex{display:flex}.is-layout-flex{flex-wrap:wrap;align-items:center}.is-layout-flex>:is(*,div){margin:0}body .is-layout-grid{display:grid}.is-layout-grid>:is(*,div){margin:0}:where(.wp-block-columns.is-layout-flex){gap:2em}:where(.wp-block-columns.is-layout-grid){gap:2em}:where(.wp-block-post-template.is-layout-flex){gap:1.25em}:where(.wp-block-post-template.is-layout-grid){gap:1.25em}.has-black-color{color:var(--wp--preset--color--black) !important}.has-cyan-bluish-gray-color{color:var(--wp--preset--color--cyan-bluish-gray) !important}.has-white-color{color:var(--wp--preset--color--white) !important}.has-pale-pink-color{color:var(--wp--preset--color--pale-pink) !important}.has-vivid-red-color{color:var(--wp--preset--color--vivid-red) !important}.has-luminous-vivid-orange-color{color:var(--wp--preset--color--luminous-vivid-orange) !important}.has-luminous-vivid-amber-color{color:var(--wp--preset--color--luminous-vivid-amber) !important}.has-light-green-cyan-color{color:var(--wp--preset--color--light-green-cyan) !important}.has-vivid-green-cyan-color{color:var(--wp--preset--color--vivid-green-cyan) !important}.has-pale-cyan-blue-color{color:var(--wp--preset--color--pale-cyan-blue) !important}.has-vivid-cyan-blue-color{color:var(--wp--preset--color--vivid-cyan-blue) !important}.has-vivid-purple-color{color:var(--wp--preset--color--vivid-purple) !important}.has-black-background-color{background-color:var(--wp--preset--color--black) !important}.has-cyan-bluish-gray-background-color{background-color:var(--wp--preset--color--cyan-bluish-gray) !important}.has-white-background-color{background-color:var(--wp--preset--color--white) !important}.has-pale-pink-background-color{background-color:var(--wp--preset--color--pale-pink) !important}.has-vivid-red-background-color{background-color:var(--wp--preset--color--vivid-red) !important}.has-luminous-vivid-orange-background-color{background-color:var(--wp--preset--color--luminous-vivid-orange) !important}.has-luminous-vivid-amber-background-color{background-color:var(--wp--preset--color--luminous-vivid-amber) !important}.has-light-green-cyan-background-color{background-color:var(--wp--preset--color--light-green-cyan) !important}.has-vivid-green-cyan-background-color{background-color:var(--wp--preset--color--vivid-green-cyan) !important}.has-pale-cyan-blue-background-color{background-color:var(--wp--preset--color--pale-cyan-blue) !important}.has-vivid-cyan-blue-background-color{background-color:var(--wp--preset--color--vivid-cyan-blue) !important}.has-vivid-purple-background-color{background-color:var(--wp--preset--color--vivid-purple) !important}.has-black-border-color{border-color:var(--wp--preset--color--black) !important}.has-cyan-bluish-gray-border-color{border-color:var(--wp--preset--color--cyan-bluish-gray) !important}.has-white-border-color{border-color:var(--wp--preset--color--white) !important}.has-pale-pink-border-color{border-color:var(--wp--preset--color--pale-pink) !important}.has-vivid-red-border-color{border-color:var(--wp--preset--color--vivid-red) !important}.has-luminous-vivid-orange-border-color{border-color:var(--wp--preset--color--luminous-vivid-orange) !important}.has-luminous-vivid-amber-border-color{border-color:var(--wp--preset--color--luminous-vivid-amber) !important}.has-light-green-cyan-border-color{border-color:var(--wp--preset--color--light-green-cyan) !important}.has-vivid-green-cyan-border-color{border-color:var(--wp--preset--color--vivid-green-cyan) !important}.has-pale-cyan-blue-border-color{border-color:var(--wp--preset--color--pale-cyan-blue) !important}.has-vivid-cyan-blue-border-color{border-color:var(--wp--preset--color--vivid-cyan-blue) !important}.has-vivid-purple-border-color{border-color:var(--wp--preset--color--vivid-purple) !important}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background:var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background:var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background:var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important}.has-cool-to-warm-spectrum-gradient-background{background:var(--wp--preset--gradient--cool-to-warm-spectrum) !important}.has-blush-light-purple-gradient-background{background:var(--wp--preset--gradient--blush-light-purple) !important}.has-blush-bordeaux-gradient-background{background:var(--wp--preset--gradient--blush-bordeaux) !important}.has-luminous-dusk-gradient-background{background:var(--wp--preset--gradient--luminous-dusk) !important}.has-pale-ocean-gradient-background{background:var(--wp--preset--gradient--pale-ocean) !important}.has-electric-grass-gradient-background{background:var(--wp--preset--gradient--electric-grass) !important}.has-midnight-gradient-background{background:var(--wp--preset--gradient--midnight) !important}.has-small-font-size{font-size:var(--wp--preset--font-size--small) !important}.has-medium-font-size{font-size:var(--wp--preset--font-size--medium) !important}.has-large-font-size{font-size:var(--wp--preset--font-size--large) !important}.has-x-large-font-size{font-size:var(--wp--preset--font-size--x-large) !important}:where(.wp-block-post-template.is-layout-flex){gap:1.25em}:where(.wp-block-post-template.is-layout-grid){gap:1.25em}:where(.wp-block-columns.is-layout-flex){gap:2em}:where(.wp-block-columns.is-layout-grid){gap:2em}:root :where(.wp-block-pullquote){font-size:1.5em;line-height:1.6} /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none;max-width:100%;height:auto}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.spiregradient{background-image:-webkit-linear-gradient(0deg,#04060f,#be0000);background-image:-moz-linear-gradient(0deg,#04060f,#be0000);background-image:-ms-linear-gradient(0deg,#04060f,#be0000);background-image:-o-linear-gradient(0deg,#04060f,#be0000);background-image:linear-gradient(90deg,#04060f,#be0000)}.maritimegradient{background-image:-webkit-linear-gradient(0deg,#0f447a,#008081,#00806c) !important;background-image:-moz-linear-gradient(0deg,#0f447a,#008081,#00806c) !important;background-image:-ms-linear-gradient(0deg,#0f447a,#008081,#00806c) !important;background-image:-o-linear-gradient(0deg,#0f447a,#008081,#00806c) !important;background-image:linear-gradient(90deg,#0f447a,#008081,#00806c) !important}.aviationgradient{background-image:-webkit-linear-gradient(0deg,#80146e,#3c2680,#0f447a) !important;background-image:-moz-linear-gradient(0deg,#80146e,#3c2680,#0f447a) !important;background-image:-ms-linear-gradient(0deg,#80146e,#3c2680,#0f447a) !important;background-image:-o-linear-gradient(0deg,#80146e,#3c2680,#0f447a) !important;background-image:linear-gradient(90deg,#80146e,#3c2680,#0f447a) !important}.weathergradient{background-image:-webkit-linear-gradient(0deg,#00806c,#c7904b,#c85a3d) !important;background-image:-moz-linear-gradient(0deg,#00806c,#c7904b,#c85a3d) !important;background-image:-ms-linear-gradient(0deg,#00806c,#c7904b,#c85a3d) !important;background-image:-o-linear-gradient(0deg,#00806c,#c7904b,#c85a3d) !important;background-image:linear-gradient(90deg,#00806c,#c7904b,#c85a3d) !important}.spaceservicesgradient,.space-servicesgradient,.spacegradient,.orbitalgradient{background-image:-webkit-linear-gradient(0deg,#04060f,#485463,#2280c5) !important;background-image:-moz-linear-gradient(0deg,#04060f,#485463,#2280c5) !important;background-image:-ms-linear-gradient(0deg,#04060f,#485463,#2280c5) !important;background-image:-o-linear-gradient(0deg,#04060f,#485463,#2280c5) !important;background-image:linear-gradient(90deg,#04060f,#485463,#2280c5) !important}.federalgradient{background-image:-webkit-linear-gradient(0deg,#00806c,#04060f,#be0000) !important;background-image:-moz-linear-gradient(0deg,#00806c,#04060f,#be0000) !important;background-image:-ms-linear-gradient(0deg,#00806c,#04060f,#be0000) !important;background-image:-o-linear-gradient(0deg,#00806c,#04060f,#be0000) !important;background-image:linear-gradient(90deg,#00806c,#04060f,#be0000) !important}.earthintelligencegradient,.earth-intelligencegradient,.earthintelgradient,.earthinformationgradient,.earthinfogradient{background-image:-webkit-linear-gradient(0deg,#008081,#00806c,#2280c5) !important;background-image:-moz-linear-gradient(0deg,#008081,#00806c,#2280c5) !important;background-image:-ms-linear-gradient(0deg,#008081,#00806c,#2280c5) !important;background-image:-o-linear-gradient(0deg,#008081,#00806c,#2280c5) !important;background-image:linear-gradient(90deg,#008081,#00806c,#2280c5) !important}@font-face{font-family:"Apercu";src:url(//documentation.spire.com/wp-content/themes/docs/css/../font/apercu-mono-regular.woff2) format("woff2"),url(//documentation.spire.com/wp-content/themes/docs/css/../font/apercu-mono-regular.woff) format("woff");font-weight:400;font-display:swap}@font-face{font-family:"Apercu";src:url(//documentation.spire.com/wp-content/themes/docs/css/../font/apercu-mono-bold.woff2) format("woff2"),url(//documentation.spire.com/wp-content/themes/docs/css/../font/apercu-mono-bold.woff) format("woff");font-weight:700;font-display:swap} /*! HTML5 Boilerplate v8.0.0 | MIT License | https://html5boilerplate.com/ */ html{color:#04060f;font-size:1em;line-height:1.4;overflow-x:hidden;background-color:#fff;overscroll-behavior-y:none}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;height:1px;border:0;border-top:1px solid #c6c7c8;margin:1em 0;padding:0}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}a{color:inherit;text-decoration:none}nav ul{list-style:none;padding:0;margin:0}nav ul li+li{margin-top:0}dl,dt,dd{margin:0;padding:0}blockquote{padding:0;margin-left:0}.mobileonly{display:none}@media only screen and (max-width:750px){.desktoponly{display:none}.mobileonly{display:block}}.mobilehide{display:block}.desktophide{display:none}@media only screen and (max-width:750px){.desktophide{display:block}.mobilehide{display:none}}.clearfix .col{font-style:normal;float:left;margin:0 1.3%}.clearfix .col.col1{width:5.7%}.clearfix .col.col2{width:14%}.clearfix .col.col2five{width:17.363%}.clearfix .col.col3{width:22.3%}.clearfix .col.col4{width:30.6%}.clearfix .col.col5{width:38.9%}.clearfix .col.col6{width:47.2%}.clearfix .col.col7{width:55.5%}.clearfix .col.col8{width:63.8%}.clearfix .col.col9{width:72.1%}.clearfix .col.col10{width:80.4%}.clearfix .col.col11{width:88.7%}.clearfix .col.col12{width:97%}body{padding-top:50px}.wrapper{position:relative;max-width:1440px;width:100%;margin:0 auto}@media only screen and (max-width:1000px){.wrapper{width:97%}.clearfix .col.col5,.clearfix .col.col6,.clearfix .col.col7,.clearfix .col.col8,.clearfix .col.col9,.clearfix .col.col10,.clearfix .col.col11,.clearfix .col.col12{width:97.4%;float:none;clear:left}}@media only screen and (max-width:750px){.clearfix .col.col1,.clearfix .col.col2,.clearfix .col.col2five,.clearfix .col.col3,.clearfix .col.col4{width:97.4%;float:none}.clearfix .col.empty{display:none}}body{font-family:'Exo',sans-serif,sans-serif;letter-spacing:.02em;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{font-weight:800;font-family:'Exo',sans-serif;letter-spacing:.02em;margin:0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#be0000;text-decoration:underline}h1 .beta_label,h2 .beta_label,h3 .beta_label,h4 .beta_label,h5 .beta_label,h6 .beta_label{background:#be0000;color:#fff;border-radius:.2em;display:inline-block;font-size:.6em;padding:.3em .3em .25em;text-transform:uppercase;margin-right:.7em;vertical-align:middle;line-height:1em;float:left;position:relative;top:.5em}*+h5,*+h6{margin-top:2em}h1{font-size:40px;line-height:1.1em}h1+p{margin-top:24px}h1+img,h1+figure{margin-top:32px}h2{font-size:34px;line-height:1.1em}h3{font-size:28px;line-height:1.2em}h2+p,h3+p{margin-top:16px}h2+figure,h3+figure,h2+img,h3+img{margin-top:32px}h4{font-size:24px;line-height:1.33em}h5,h6{font-size:18px;line-height:1.5em;font-weight:700}.lead p{font-size:18px;line-height:1.5em}p{font-size:15px;line-height:26px;letter-spacing:.02em;word-wrap:break-word}p.smaller{font-size:14px;line-height:22px}p.lead{font-size:18px;line-height:1.5em}p.lead+img,p.lead+figure{margin-top:24px}p.lead+.button,p.lead+button,p.lead+input[type=submit]{margin-top:32px}p:first-child{margin-top:0}p a{text-decoration:underline;font-weight:700;color:#be0000}p a.calltoaction,p a.arrowlink{text-decoration:none}caption,figcaption{font-family:'Apercu',monospace;font-size:13px;line-height:1.5em;font-weight:700;letter-spacing:0}.pagecontent li a{text-decoration:underline}ul{padding-left:1.1em;font-size:15px}ul li+li{margin-top:.75em}ul.advantages{list-style:none;padding-left:25px;font-size:14px;margin-bottom:2.5em}ul.advantages li{position:relative}ul.advantages li:before{content:'';left:-25px;top:3px;position:absolute;border-radius:100%;width:14px;height:14px;background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/check.svg) #be0000 no-repeat center 3px;background-size:8px 8px}ul.advantages li+li{margin-top:1.5em}ol{padding-left:1.9em}ol li a{text-decoration:underline;font-weight:700;color:#be0000}ol li+li{margin-top:.75em}ol li+li ol,ol li+li ul{margin:1em 0}.postdate{font-size:13px;font-family:'Apercu',monospace;font-weight:700;display:block;margin-bottom:1em;text-align:center;color:#c6c7c8}.thepostauthor{text-align:center;color:#c6c7c8;font-weight:700}.thepostauthor img{width:50px;height:50px;border-radius:100%}pre,code{background:#f5f2f0;font-size:1em}@media only screen and (max-width:750px){h1{font-size:40px !important;line-height:1.1em}h2{font-size:32px;line-height:1.2em}h3,h4{font-size:20px;line-height:24px}}i[class^=icon]{display:inline-block;width:1em;height:1em;background-repeat:no-repeat;background-position:center center;background-size:100% 100%;text-indent:9999px;overflow:hidden;vertical-align:middle}i.icon-government{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_government.svg?v2)}i.icon-port{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_port.svg?v2)}i.icon-environment{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_environment.svg?v2)}i.icon-insurance{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_insurance.svg?v2)}i.icon-rig{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_rig.svg?v2)}i.icon-container{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_container.svg?v2)}i.icon-weather_white{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_weather_white.svg?v2)}i.icon-aviation_white{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_aviation_white.svg?v2)}i.icon-maritime_white{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_maritime_white.svg?v2)}i.icon-wind{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_wind.svg?v2)}i.icon-orbit{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_orbit.svg?v2)}i.icon-atmosphere{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_atmosphere.svg?v2)}i.icon-maritime{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_maritime.svg?v2)}i.icon-database{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_database.svg?v2)}i.icon-faq{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_faq.svg?v2)}i.icon-api_cloud{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_api_cloud.svg?v2)}i.icon-api{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_api.svg?v2)}i.icon-weather{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_weather.svg?v2)}i.icon-chat{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_chat.svg?v2)}i.icon-coverage{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_coverage.svg?v2)}i.icon-orbit{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_orbit.svg?v2)}i.icon-satellite_red{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_satellite_red.svg?v2)}i.icon-family_leave{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_family_leave.svg?v2)}i.icon-screen{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_screen.svg?v2)}i.icon-travel{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_travel.svg?v2)}i.icon-benefits{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_benefits.svg?v2)}i.icon-instagram{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_instagram.svg?v2)}i.icon-linkedin{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_linkedin.svg?v2)}i.icon-twitter{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_twitter.svg?v2)}i.icon-facebook{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_facebook.svg?v2)}i.icon-facebook{background-size:75% 75%}.calltoaction{background:#be0000;color:#fff;font-weight:700;font-size:14px;line-height:1.1em;position:relative;z-index:1;letter-spacing:.05em;padding:13px 20px;min-width:142px;display:inline-block;text-align:center;outline:none}.calltoaction:before,.calltoaction:after{z-index:-1;background:#be0000;position:absolute;left:0;top:0;width:100%;height:100%;content:''}.calltoaction:after{background:#04060f;width:0;transition:width .3s ease-in-out}.calltoaction:hover:after{width:100%}.calltoaction.inverted{background:0 0;color:#be0000;border:1px solid #be0000;padding-top:12px;padding-bottom:12px;transition:color .3s}.calltoaction.inverted:hover{color:#fff}.calltoaction.inverted:after{background:#be0000}.calltoaction.inverted:before{background:0 0}.calltoaction+.calltoaction{margin-left:1.5em}.arrowlink{color:#be0000;font-weight:700;font-size:14px;padding-right:1.6em;position:relative;display:inline-block;margin:0 2em 1em 0}.arrowlink:after,.arrowlink:before{content:'';position:absolute}.arrowlink:before{width:1em;height:1em;border-radius:100%;right:0;background:#be0000;top:50%;margin-top:-.55em}.arrowlink:after{right:.32em;width:.37em;height:.37em;top:50%;margin-top:-.22em;border-top:2px solid #fff;border-right:2px solid #fff;box-sizing:border-box;transform:rotateZ(45deg)}.arrowlink:last-child{margin-bottom:0}@media only screen and (max-width:750px){.calltoaction+.calltoaction{margin-top:1em;margin-left:0}}dl{margin:2em 0 2em;background:#f5f2f0;border-radius:10px;overflow:hidden;padding:1em}dl dt{font-weight:700;padding-left:10px}dl dt code{font-size:1em}dl dt em{font-weight:300;font-size:.85em;font-style:normal}dl dd{padding-left:10px;font-size:12px}dl dd+dt{margin-top:1em;border-top:1px solid #e2e2e2;padding-top:1em}dl dd+dd{padding-top:.5em}dl dd ul{margin-top:1em;font-size:12px}table{font-size:14px;border:1px solid #c6c7c8;border-collapse:collapse;width:100%;margin:2em auto}table th,table td{padding:.6em;border:1px solid #c6c7c8}.boxed{background:#fafafa;padding:1em;border-radius:5px;position:relative}#mobiletrigger{display:none}#relevanssi-live-search-status{display:none}#chooser{display:none}#searchpane{display:none;position:fixed;background:rgba(0,0,0,.8);left:0;top:0;width:100%;height:100%;z-index:9999999}#searchpane.active{display:block}#searchpane>div{left:50%;top:50%;position:absolute;transform:translate(-50%,-100%);max-width:500px;min-width:350px}#docmap{position:fixed;left:0;top:50px;width:300px;border-right:1px solid #e2e2e2;bottom:0;font-size:14px;color:#485463;background:#fafafa;font-weight:300}#docmap>div>ul>li:first-child a{font-size:1.25em;padding-left:0;padding-bottom:.5em;border-bottom:1px solid #e2e2e2;margin-bottom:.5em}#docmap li .beta_label{background:#485463;color:#fff;border-radius:.2em;text-transform:uppercase;font-size:13px;margin-left:.2em}#docmap li>a{padding-left:1em;position:relative;display:block;line-height:1em;padding-top:.2em;padding-bottom:.2em}#docmap li.active>ul{height:auto}#docmap li.has-sub-menu>a:before{content:'';position:absolute;left:0;top:.35em;height:.5em;width:.5em;transform:rotate(-45deg);border-bottom:1px solid #ccc;border-right:1px solid #ccc}#docmap li.has-sub-menu.current>a:before,#docmap li.has-sub-menu.active>a:before,#docmap li.has-sub-menu.forceopen>a:before{top:.15em;transform:rotate(45deg)}#docmap>div{padding:1em;position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;overflow:scroll}#docmap>div>ul li.active>a{font-weight:700;color:#485463}#docmap>div>ul li.active>a.current{font-weight:800}#docmap>div>ul li.forceopen>ul{height:auto}#docmap>div>ul>li ul{padding-left:.5em;height:0;overflow:hidden}#docmap>div>ul>li ul.active{height:auto}.search section:first-child{padding:5vw 0 0}#content section{padding:5vw 0;border-bottom:1px solid #e2e2e2}#content section.titleonly{border-bottom:0;padding-bottom:0}#content section.titleonly+section{padding-top:1em}#content section ul li a{text-decoration:underline;font-weight:700;color:#be0000}.ctabox{background:#fafafa;border-radius:10px;margin:2em 0;padding:1em}.ctabox h1,.ctabox h2,.ctabox h3,.ctabox h4,.ctabox h5,.ctabox h6{font-weight:800;font-size:25px}.ctabox ul li a{text-decoration:underline;color:#be0000;font-weight:700}.codebox{border-radius:5px;overflow:hidden;font-size:13px;font-family:'Apercu',monospace;background:#f5f2f0;margin:1em 0}.codebox .title,.codebox .code{padding:.5em 1.5em}.codebox .title{background:#00806c;color:#fff;font-weight:700}.codebox .code{font-size:15px}main{min-height:calc(100vh - 176px)}main pre{padding:1em;margin:.5em 0;white-space:break-spaces;overflow:auto}main pre code{padding:0}main code[class*=language-],main pre[class*=language-]{white-space:break-spaces;border-radius:5px}.page-template-template-blog h1,.single h1{margin-bottom:.35em}.page-template-default .col4,.single #content .col4,.blog #content .col4{padding-top:2.2em;position:sticky;top:60px}.page-template-default .col4 pre[class],.single #content .col4 pre[class],.blog #content .col4 pre[class]{font-size:12px}.page-template-default .col7 ul li a,.single #content .col7 ul li a,.blog #content .col7 ul li a{text-decoration:underline;color:#be0000;font-weight:700}main{padding-left:330px}.home main{padding-left:0}.home main h1{font-size:30px}.home main h2{font-size:22px}.home main p+h2{margin-top:1.5em}.home main h3{font-size:19px}.home main .spirebadge{width:80px;height:80px;position:relative;display:block;margin:0 auto -40px auto;top:-40px}.embed-container{padding-bottom:56.25%;height:0;overflow:hidden;width:100%;position:relative}.embed-container iframe,.embed-container object,.embed-container embed,.embed-container img,.embed-container video{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.bloglist{list-style:none;padding:0;margin:1em 0 0}.bloglist li{padding:0;margin:0}.bloglist li+li{margin-top:1em;padding-top:1em;border-top:1px solid #e2e2e2}.bloglist p{margin-top:0;font-weight:700}.bloglist .post_meta{font-size:.8em}.bloglist .product_tag{margin-right:1em;float:right}.post_meta{display:block;margin-bottom:.5em;font-family:Apercu,monospace;color:#04060f}.author_meta{margin-top:1em;margin-bottom:1em}.author_meta>div{display:inline-block;background:#f2f2f2;padding:10px;border-radius:40px}.author_meta img{float:left;width:2.9em;height:2.9em;border-radius:100%;border:2px solid #e2e2e2;margin-right:1em}.author_meta .cont{float:left}.author_meta span.name{font-weight:800}.author_meta span.job_title{font-size:.8em;display:block;line-height:1em;white-space:nowrap}.product_tag{background:#be0000;font-family:Apercu,monospace;color:#fff;padding:.2em .5em .1em;display:inline-block;border-radius:3px;font-size:.8em}.product_tag+.product_tag{margin-left:.25em}.product_tag.maritime-2-0{background:#185a8b}.product_tag.vessels-api,.product_tag.messages-api,.product_tag.historical-positions-api,.product_tag.routing-api{background:#00806c}.product_tag.tcp-stream-v2,.product_tag.uniproxy{background:#0f447a}.productlist{list-style:none;padding:0;margin:0}.productlist li{padding:0;margin:0;font-size:16px;clear:left}.productlist li+li{margin-top:.5em}.productlist li img{margin-right:.5em;margin-bottom:1em;float:left;width:auto;height:3em;transform:translateY(-.75em)}.productlist.legacy li{float:left;clear:none}.productlist.legacy li+li{margin-top:0;margin-left:2em}.productlist.legacy li img{height:1.5em;transform:none}.relevanssi-live-search-results-showing{left:0 !important;top:100% !important}.relevanssi-live-search-result{border-bottom:1px solid rgba(30,30,30,.1)}.relevanssi-live-search-result ul{padding:0 .9em .9em;margin:0;display:block}.relevanssi-live-search-result ul li{font-size:.7em;display:inline-block}.relevanssi-live-search-result ul li a span{text-decoration:underline}.relevanssi-live-search-result ul li+li{margin-top:0}.relevanssi-live-search-result ul li+li a:before{content:'»';display:inline-block;margin:0 .3em}.relevanssi-live-search-result p{padding-bottom:0 !important;border-bottom:0 !important}.searchresults{list-style:none;padding:0;margin:1em 0 5vw}.searchresults p,.searchresults p:first-child{padding:0;margin:0}.searchresults>li{padding:1em 0;border-bottom:1px solid #e2e2e2}.searchresults>li+li{margin-top:0}.result_breadcrumb{margin:0;padding:0;display:block;list-style:none}.result_breadcrumb li{font-size:.7em;display:inline-block}.result_breadcrumb li a span{text-decoration:underline}.result_breadcrumb li+li{margin-top:0}.result_breadcrumb li+li a:before{content:'»';display:inline-block;margin:0 .3em}body div.code-toolbar>.toolbar{top:-.7em;right:-.7em}html .rlv-has-spinner{border-color:#be0000}html .rlv-has-spinner:after{background:#be0000}@media only screen and (max-width:1000px){.tablewrapper{overflow-x:auto}main{padding-left:0}#docmap{position:static;top:auto;left:auto;width:100%;border-right:0;border-bottom:1px solid #f2f2f2}#docmap>div{position:static;display:none}#chooser{display:block;position:fixed;bottom:0;left:0;width:100%;z-index:10;background:#fff;padding:1em;box-sizing:border-box}#chooser select{width:100%}.home .col.col4,.home .col.col3{width:97.4%;clear:left;float:none}.home main .spirebadge{margin-top:40px}.productlist.legacy li+li{float:none;clear:left;margin-top:1em;margin-left:0}header.active #mobiletrigger{filter:invert(1)}header.active #mobilemenuwrapper{height:calc(100vh - 50px)}header #mobilemenuwrapper{position:fixed;top:50px;left:0;background:#fff;width:100%;height:0;overflow:scroll}header #mobiletrigger{display:block;position:absolute;right:50px;width:50px;height:50px;background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon-menu.svg) #fff no-repeat center center/70% 70%;border-left:1px solid #f2f2f2;top:0;z-index:100;overflow:hidden;text-indent:-9999px;transition:filter .3s}header #darkmodetoggle{display:none}header #mainmenu{position:static;left:auto;top:auto;height:auto;border-top:1px solid #f2f2f2}header #mainmenu>ul{height:auto;padding-left:0}header #mainmenu>ul>li{display:block;white-space:initial;height:auto}header #mainmenu>ul>li.apis>ul>li{min-width:0;padding:0;border-top:1px solid #f2f2f2}header #mainmenu>ul>li.apis>ul>li ul li{border-top:1px solid #f2f2f2}header #mainmenu>ul>li.apis>ul>li ul li:before{left:-.3em;top:1em}header #mainmenu>ul>li.apis>ul>li:after{top:50%;right:1em;transform:translateY(-50%)}header #mainmenu>ul>li.apis>ul>li a:hover{font-weight:400}header #mainmenu>ul>li.apis>ul a{padding-left:1em;padding-bottom:1em;padding-top:1em;display:block}header #mainmenu>ul>li+li{border-top:1px solid #f2f2f2}header #mainmenu>ul>li>ul{display:block;position:relative;padding:0;box-shadow:none;top:auto;left:auto}header #mainmenu>ul>li:hover>ul{display:block}header #mainmenu>ul>li>a{display:block;height:auto;padding:1em;line-height:1.1em}header #mainmenu+nav{float:none;margin-right:0}header #mainmenu+nav ul{border-bottom:1px solid #f2f2f2}header #mainmenu+nav ul li{border-top:1px solid #f2f2f2;display:block;opacity:1;width:100%;height:auto;line-height:1.1em;padding:0}header #mainmenu+nav ul li>a{padding:1em;display:block;background:#fafafa}header #mainmenu+nav ul li.hasdm{display:none}header #mainmenu+nav ul li+li{margin-left:0;border-top:1px solid #f2f2f2}}@media only screen and (max-width:550px){header #logo{height:20px;margin-top:16px}}.hubspot_form_lazyloader.not_loaded{min-height:50px;background:url(https://insights.spire.com/hubfs/raw_assets/public/maritime_weather_tool_v2/img/loader.svg) no-repeat center center/50px 50px}form{display:block;font-size:14px}form>.field,form>.legal-consent-container{clear:both;margin-bottom:2em}form .inputs-list li{clear:left}form p{font-size:14px}form fieldset.form-columns-1,form fieldset.form-columns-2,form fieldset.form-columns-3{max-width:none}form fieldset.form-columns-1>.field,form fieldset.form-columns-2>.field,form fieldset.form-columns-3>.field,form fieldset.form-columns-1>.hs-dependent-field,form fieldset.form-columns-2>.hs-dependent-field,form fieldset.form-columns-3>.hs-dependent-field{margin-bottom:1em}form fieldset.form-columns-1 .input .hs-fieldtype-intl-phone.hs-input,form fieldset.form-columns-2 .input .hs-fieldtype-intl-phone.hs-input,form fieldset.form-columns-3 .input .hs-fieldtype-intl-phone.hs-input{width:100%}form fieldset.form-columns-3{display:table;margin-bottom:2em}form fieldset.form-columns-3 .field.hs-form-field{display:table-cell;border-right:1px solid #c6c7c8;padding:0 1em;float:none}form fieldset.form-columns-3 .field.hs-form-field:first-child{padding-left:0}form fieldset.form-columns-3 .field.hs-form-field:last-child{border-right:0;padding-right:0}form .multi-container{margin-top:1em}form label{font-weight:700}form label.hs-error-msg{color:#be0000;font-weight:400;margin-top:.5em;display:inline-block}form label .hs-form-required{color:#be0000}form select,form input[type=text],form input[type=email],form input[type=tel],form input[type=search]{box-sizing:border-box;height:40px;border-radius:0 !important;border:1px solid #c6c7c8;display:block;width:100%;margin-top:.5em}form input[type=search]{outline-color:#be0000;outline-offset:0;padding:1em}form select{background:#fafafa}form textarea{width:100%;margin-top:.5em;border:1px solid #c6c7c8;height:90px}form input[type=file]{margin-top:.5em}form fieldset.form-columns-1 .input select.hs-input,form fieldset.form-columns-1 .input input[type=text].hs-input,form fieldset.form-columns-1 .input input[type=email].hs-input,form fieldset.form-columns-1 .input input[type=tel].hs-input,form fieldset.form-columns-1 .input input[type=tel].hs-input,form fieldset.form-columns-1 .input textarea.hs-input{width:100%}form .hs-form-booleancheckbox{margin-bottom:1em}form .hs-form-booleancheckbox label,form .hs-form-radio label,form .hs-form-checkbox label{font-weight:400;cursor:pointer}form .hs-form-booleancheckbox p,form .hs-form-radio p,form .hs-form-checkbox p{display:inline;line-height:1em}form .hs-form-booleancheckbox input[type=radio],form .hs-form-radio input[type=radio],form .hs-form-checkbox input[type=radio],form .hs-form-booleancheckbox input[type=checkbox],form .hs-form-radio input[type=checkbox],form .hs-form-checkbox input[type=checkbox]{margin-right:.5em;position:relative;top:.15em}form .hs-form-booleancheckbox-display,form .hs-form-radio-display,form .hs-form-checkbox-display{display:flex;align-items:flex-start}form .legal-consent-container .hs-form-booleancheckbox-display p{line-height:1em}form .legal-consent-container .hs-form-booleancheckbox-display>span{margin-left:0;display:inline}form ul{list-style:none;margin:0;padding:0}form ul li{margin-left:0;padding-left:0}form input[type=submit],form button{border-radius:0 !important;appearance:none;background:#be0000;color:#fff;font-weight:700;font-size:14px;line-height:1.1em;position:relative;z-index:1;letter-spacing:.05em;padding:13px 20px;min-width:142px;display:inline-block;text-align:center;outline:none;margin-top:1em;border:0;cursor:pointer}form input[type=submit]:before,form button:before,form input[type=submit]:after,form button:after{z-index:-1;background:#be0000;position:absolute;left:0;top:0;width:100%;height:100%;content:''}form input[type=submit]:after,form button:after{background:#04060f;width:0;transition:width .3s ease-in-out}form input[type=submit]:hover:after,form button:hover:after{width:100%}form input[type=submit].inverted,form button.inverted{background:0 0;color:#be0000;border:1px solid #be0000;padding-top:12px;padding-bottom:12px;transition:color .3s}form input[type=submit].inverted:hover,form button.inverted:hover{color:#fff}form input[type=submit].inverted:after,form button.inverted:after{background:#be0000}form input[type=submit].inverted:before,form button.inverted:before{background:0 0}form input[type=submit],form input[type=submit].calltoaction{background:#be0000;background-size:0 100%;background-position:0 0;background-repeat:no-repeat;transition:all .3s;background-image:-webkit-linear-gradient(#56544b,#04060f) !important;background-image:-moz-linear-gradient(#56544b,#04060f) !important;background-image:-ms-linear-gradient(#56544b,#04060f) !important;background-image:-o-linear-gradient(#56544b,#04060f) !important;background-image:linear-gradient(#04060f,#04060f) !important}form input[type=submit]:hover,form input[type=submit].calltoaction:hover{background-size:100% 100%}form input[type=submit]:before,form input[type=submit].calltoaction:before,form input[type=submit]:after,form input[type=submit].calltoaction:after{display:none}form .hs_error_rollup .hs-error-msgs{margin:1em auto;color:#be0000}form .hs_recaptcha{margin:0 auto 1em}@media only screen and (max-width:750px){form fieldset.form-columns-3{display:block}form fieldset.form-columns-3>.field,form fieldset.form-columns-3>.hs-dependent-field{display:block}form fieldset.form-columns-3>.field.field.hs-form-field,form fieldset.form-columns-3>.hs-dependent-field.field.hs-form-field{display:block;padding:0;border:0}form fieldset.form-columns-3>.field.field.hs-form-field:first-child,form fieldset.form-columns-3>.hs-dependent-field.field.hs-form-field:first-child{display:block}form fieldset.form-columns-2 .field input[type=text],form fieldset.form-columns-3 .field input[type=text],form fieldset.form-columns-2 .field input[type=email],form fieldset.form-columns-3 .field input[type=email],form fieldset.form-columns-2 .field input[type=tel],form fieldset.form-columns-3 .field input[type=tel],form fieldset.form-columns-2 .field input[type=tel],form fieldset.form-columns-3 .field input[type=tel]{width:100% !important}}#darkmodetoggle{display:inline-block;border:1px solid #aeb1b4;height:20px;width:40px;border-radius:20px;margin-top:15px;overflow:hidden;position:relative}#darkmodetoggle:before{position:absolute;content:'';background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/sun.svg) #be0000 no-repeat center center/78% 78%;height:16px;width:16px;left:2px;top:2px;border-radius:18px;box-sizing:border-box;box-shadow:0 0 5px -1px #000;transition:left .3s,background-color .3s}html.darkmode{background:#04060f;color:#fff}html.darkmode #darkmodetoggle:before{left:22px;background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/moon.svg) #fff no-repeat center center/60% 60%}html.darkmode header{background:#04060f}html.darkmode #logo img{filter:invert(1) brightness(255)}html.darkmode #homepage_intro img.aligncenter{filter:invert(1)}html.darkmode #mainmenu+nav ul li img{filter:invert(1)}html.darkmode .boxed,html.darkmode dl,html.darkmode .ctabox,html.darkmode .codebox{background:rgba(255,255,255,.2)}html.darkmode .codebox pre[class*=language-]{background:0 0}html.darkmode .codebox .title{background:#fff;color:#04060f}html.darkmode footer{border-top:1px solid #fff}html.darkmode #docmap{background:rgba(255,255,255,.1);color:#fff}html.darkmode #docmap>div>ul li.active>a{color:#fff}html.darkmode pre,html.darkmode code{color:#04060f}html.darkmode #mainmenu>ul>li>ul{background:#04060f;border:1px solid #fff}html.darkmode #mainmenu li.apis>ul>li+li{border-top-color:#fff}html.darkmode #mainmenu>ul>li.current-menu-item>a:hover,html.darkmode #mainmenu>ul>li.current-menu-ancestor>a:hover,html.darkmode #mainmenu>ul>li.current-menu-parent>a:hover,html.darkmode #mainmenu>ul>li.current_page_parent>a:hover,html.darkmode #mainmenu>ul>li.current_page_ancestor>a:hover{background:#fff;color:#04060f}html.darkmode #mainmenu>ul>li:hover>a{background:#fff;color:#04060f}html.darkmode .calltoaction.inverted{background:#fff}html.darkmode pre[class*=language-]{background:rgba(255,255,255,.1)}html.darkmode pre[class*=language-] code{filter:invert(1)}html.darkmode :not(pre)>code[class*=language-]{background:rgba(0,0,0,.1);filter:invert(1)}html.darkmode form input[type=search]{background:0 0;color:#fff}html.darkmode .relevanssi-live-search-results{background:#04060f;border:1px solid #fff}html.darkmode .relevanssi-live-search-result,html.darkmode .relevanssi-live-search-result p,html.darkmode .relevanssi-live-search-result-status p{border-bottom:1px solid rgba(255,255,255,.3)}html.darkmode .post_meta{color:#fff}html.darkmode #searchpane .boxed{background:#343435}html.darkmode .home main .spirebadge{filter:invert(1) brightness(255)}body #onetrust-consent-sdk #onetrust-policy-title,body #onetrust-consent-sdk #onetrust-policy-text,body #onetrust-consent-sdk #onetrust-policy-text *:not(.onetrust-vendors-list-handler){font-weight:300}body #onetrust-consent-sdk .pc-logo-container,body #onetrust-consent-sdk .pc-footer-logo{display:none}body #onetrust-consent-sdk #onetrust-banner-sdk{background-color:#fff;border-top:1px solid #ccc}body #onetrust-consent-sdk #onetrust-banner-sdk a[href]{color:#be0000}body #onetrust-consent-sdk #onetrust-pc-btn-handler.cookie-setting-link{width:auto !important;color:#be0000}body #onetrust-consent-sdk #cookie-preferences .always-active{color:#be0000}body #onetrust-consent-sdk #onetrust-pc-sdk .privacy-notice-link,body #onetrust-consent-sdk #onetrust-pc-sdk .category-vendors-list-handler,body #onetrust-consent-sdk #onetrust-pc-sdk .category-host-list-handler,body #onetrust-consent-sdk #onetrust-pc-sdk .vendor-privacy-notice,body #onetrust-consent-sdk #onetrust-pc-sdk #hosts-list-container .host-title a,body #onetrust-consent-sdk #onetrust-pc-sdk #hosts-list-container .accordion-header .host-view-cookies,body #onetrust-consent-sdk #onetrust-pc-sdk #hosts-list-container .cookie-name-container a{color:#be0000}body #onetrust-consent-sdk #onetrust-pc-sdk h3,body #onetrust-consent-sdk #onetrust-pc-sdk h4,body #onetrust-consent-sdk #onetrust-pc-sdk h6,body #onetrust-consent-sdk #onetrust-pc-sdk p,body #onetrust-consent-sdk #onetrust-pc-sdk #pc-policy-text,body #onetrust-consent-sdk #onetrust-pc-sdk #pc-title{font-weight:300}body #onetrust-consent-sdk #onetrust-pc-sdk .switch-inner:before{background:#ffd8d8}body #onetrust-consent-sdk #onetrust-pc-sdk .switch-checkbox:checked+.switch-label{border-color:#be0000}body #onetrust-consent-sdk #onetrust-pc-sdk .switch-checkbox:checked+.switch-label .switch-nob{background-color:#be0000;border-color:#be0000}body #onetrust-consent-sdk #onetrust-banner-sdk.ot-buttons-fw:not(.ot-iab-2) #onetrust-button-group{margin-top:0}body #onetrust-consent-sdk #onetrust-accept-btn-handler,body #onetrust-consent-sdk #onetrust-pc-sdk button:not(.close-icon){width:auto !important;color:#fff;border-radius:0;font-weight:700;text-transform:uppercase;text-decoration:none;font-family:'Exo',sans-serif;z-index:1;border:3px solid #be0000;display:inline-block;padding:.6em 1.4em .5em;position:relative;line-height:1em;-webkit-appearance:none;appearance:none}body #onetrust-consent-sdk #onetrust-accept-btn-handler:after,body #onetrust-consent-sdk #onetrust-pc-sdk button:not(.close-icon):after,body #onetrust-consent-sdk #onetrust-accept-btn-handler:before,body #onetrust-consent-sdk #onetrust-pc-sdk button:not(.close-icon):before{width:100%;left:0;top:0;position:absolute;content:'';height:0;z-index:-1;background:#be0000}body #onetrust-consent-sdk #onetrust-accept-btn-handler:after,body #onetrust-consent-sdk #onetrust-pc-sdk button:not(.close-icon):after{transition:height .1s ease-out}body #onetrust-consent-sdk #onetrust-accept-btn-handler:before,body #onetrust-consent-sdk #onetrust-pc-sdk button:not(.close-icon):before{background:#be0000;height:100%}body #onetrust-consent-sdk #onetrust-accept-btn-handler:hover:after,body #onetrust-consent-sdk #onetrust-pc-sdk button:not(.close-icon):hover:after{height:100%}body #ot-sdk-cookie-policy{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body #ot-sdk-cookie-policy div,body #ot-sdk-cookie-policy p,body #ot-sdk-cookie-policy table{line-height:1.5em;font-weight:300;color:#555}body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy h6,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy li,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy p,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy a,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy span,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy #cookie-policy-description{color:#555;font-weight:300;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy a{color:#be0000}body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy #cookie-policy-description,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy .ot-sdk-cookie-policy-group-desc,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy .ot-table-header,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy a,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy span{font-size:1em}body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy #cookie-policy-title,body #ot-sdk-cookie-policy-v2.ot-sdk-cookie-policy .ot-sdk-cookie-policy-group{color:#04060f;text-transform:uppercase;font-family:'Exo',sans-serif;font-weight:400}@media only screen and (min-width:650px){body #onetrust-banner-sdk .ot-sdk-row{padding-right:90px}}.banner{background-color:#04060f;text-align:center;color:#fff;padding:60px 0 80px;margin-bottom:0}.banner h2{margin-bottom:.5em}.banner h3{margin-bottom:1em}.banner h4{margin-bottom:1em;width:90%;margin-left:auto;margin-right:auto}.banner .icon{width:auto;height:85px;margin:0 auto;margin-bottom:35px}.banner .icon img{width:100%;height:100%;display:block;max-height:85px}.banner .tag:only-child{margin-bottom:30px}.banner.default{background-image:none !important}.banner:not(.grey) .tag:not(.inverted){border:1px solid #fff;background:0 0}.banner.white{background-color:#fff;background-image:none !important;color:#04060f}.banner.light-grey{background-color:#fafafa;background-image:none !important;color:#04060f}.banner.grey{background-color:#f2f2f2;color:#04060f;text-align:left;margin-top:110px;background-image:none !important}.banner.grey#content-block_601a7c549f437{margin-bottom:0}.banner.bleedbottom{padding-bottom:230px}.banner.bleedtop{padding-top:145px}.banner .calltoaction.inverted{border-color:#fff;color:#fff;transition:color .3s}.banner .calltoaction.inverted:hover{color:#04060f}.banner .calltoaction.inverted:after{background:#fff}.banner p:last-child{margin-bottom:0}.banner p a.calltoaction{text-decoration:none}.banner.orbitalgradient:not(.bleedbottom){padding:95px 0 105px}.banner.orbitalgradient:not(.bleedbottom) .calltoaction:not(.inverted){transition:color .3s;color:#04060f}.banner.orbitalgradient:not(.bleedbottom) .calltoaction:not(.inverted):before{background:#fff}.banner.orbitalgradient:not(.bleedbottom) .calltoaction:not(.inverted):hover{color:#fff}.banner.verbose{text-align:left;padding-bottom:40px}.banner.verbose h5{margin-bottom:2em}.banner.verbose p{font-size:14px}.banner.verbose .wrapper+.wrapper{margin-top:56px}.banner.verbose .wrapper:last-child{padding-bottom:80px}.banner.verbose .wrapper:last-child .col{position:relative}.banner.verbose .wrapper:last-child hr:last-child{position:absolute;left:0;bottom:-80px;width:97.3%;margin:0}.banner.verbose .wrapper.solo,.banner.verbose .wrapper.solo:last-child{padding-bottom:0}.banner.verbose .wrapper.solo+.wrapper,.banner.verbose .wrapper.solo:last-child+.wrapper{margin-top:0}.banner.logos{text-align:left}.banner.logos .col8+.col7 .tag{margin-top:2.5em}.banner.logos ul{list-style:none;text-align:center;margin:1em 0 0;padding:0;height:110px;display:flex;justify-content:space-between;align-items:center;width:100%}.banner.logos ul li{display:inline}.banner.logos ul li img{max-width:120px}.banner.logos ul+ul{margin-top:70px}.banner.cta{background:#485463;background-image:none !important;color:#fff;padding:88px 0 60px}.banner.cta .calltoaction{margin-top:2em}.banner.banner-bg{padding:140px 0;position:relative}.banner.banner-bg:after{content:"";position:absolute;top:0;height:100%;z-index:0;background-color:#04060f;width:100%;opacity:.5;left:0}.banner.banner-bg .wrapper{z-index:1}@media only screen and (max-width:1000px){.banner{padding:40px 0}.banner#content-block_601a7c549f437 .col.col4 h2{font-size:20px}.banner.bleedtop{padding-top:80px}.banner.bleedbottom{padding-bottom:80px}.banner.cta{padding:40px 0}.banner.logos .col.col3{width:100%}.banner.logos .col.col3 ul{justify-content:flex-start;margin-bottom:1em}.banner.logos ul{flex-wrap:wrap;height:auto}.banner.logos ul li{width:25%}.banner.logos ul li img{height:auto}.banner .col.col1{display:none}.banner .col.col1+.col.col5,.banner .col.col1+.col.col5+.col.col5{width:47.4%;float:left;clear:none}.banner.verbose .col.col5{width:47.4%;float:left}.banner.verbose .wrapper:last-child{padding-bottom:40px}.banner#content-block_60198c8b97a67.logos ul li,.banner#content-block_60197c32db02a.logos ul li,.banner#content-block_60199674eb8fe.logos ul li,.banner#content-block_602145fb2d4f0.logos ul li{width:26%}.banner#content-block_601924416cfc4.logos ul li{width:33%;justify-content:space-around}}@media only screen and (max-width:750px){.banner p{width:100% !important}.banner.grey{margin-top:40px;margin-bottom:40px}.banner.orbitalgradient:not(.bleedbottom){padding:40px 0}.banner .icon{margin-bottom:10px}.banner .col5+.col5,.banner .col4+.col4,.banner .col2five+.col2five{margin-top:2em}.banner .col.col1+.col.col5,.banner .col.col1+.col.col5+.col.col5{width:97.4%;float:none}.banner.logos .col+.col,.banner#content-block_60198c8b97a67.logos .col+.col,.banner#content-block_60197c32db02a.logos .col+.col,.banner#content-block_60199674eb8fe.logos .col+.col,.banner#content-block_602145fb2d4f0.logos .col+.col{margin-top:2em}.banner.logos .col12+.col12,.banner#content-block_60198c8b97a67.logos .col12+.col12,.banner#content-block_60197c32db02a.logos .col12+.col12,.banner#content-block_60199674eb8fe.logos .col12+.col12,.banner#content-block_602145fb2d4f0.logos .col12+.col12{margin-top:0}.banner.logos .col12+.col12 ul,.banner#content-block_60198c8b97a67.logos .col12+.col12 ul,.banner#content-block_60197c32db02a.logos .col12+.col12 ul,.banner#content-block_60199674eb8fe.logos .col12+.col12 ul,.banner#content-block_602145fb2d4f0.logos .col12+.col12 ul{margin-top:0}.banner.logos ul li,.banner#content-block_60198c8b97a67.logos ul li,.banner#content-block_60197c32db02a.logos ul li,.banner#content-block_60199674eb8fe.logos ul li,.banner#content-block_602145fb2d4f0.logos ul li{width:50%}.banner.logos ul li img,.banner#content-block_60198c8b97a67.logos ul li img,.banner#content-block_60197c32db02a.logos ul li img,.banner#content-block_60199674eb8fe.logos ul li img,.banner#content-block_602145fb2d4f0.logos ul li img{width:75%}.banner.verbose .col.col5{float:none;width:97.4%}.banner.verbose .wrapper+.wrapper{margin-top:0}.banner.verbose .wrapper+.wrapper .col{margin-top:2.25em}.banner.verbose .wrapper+.wrapper .col.col10{margin-top:0}.banner.verbose .wrapper:last-child{padding-bottom:40px}}.feedback{opacity:0;transition:opacity .3s;margin-top:1.5em;padding:1em;background:#fafafa;font-size:.85em}.feedback form>.field{margin-bottom:1em}.feedback .hs-form-booleancheckbox-display{font-size:.85em}.feedback .hs-form-field{margin-top:1em}.feedback.active{opacity:1}.feedback .hubspot_form_lazyloader{margin-top:1.5em}.feedback .hubspot_form_lazyloader .legal-consent-container{display:none}.feedback a{border-radius:1em;padding:.1em .25em 0 1.75em;font-weight:800;display:inline-block;position:relative}.feedback a:first-child{margin-left:1em}.feedback a:first-child+a{margin-left:.5em}.feedback a:before{background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/thumbsup.svg) no-repeat center center/1em 1em;width:1em;height:1em;position:absolute;content:'';left:.5em;top:.35em}.feedback a.yes:before{top:.2em}.feedback a.yes:hover{background:#00806c;color:#fff}.feedback a.yes:hover:before{filter:brightness(100)}.feedback a.no:before{top:.3em;transform:rotate(180deg);transform-origin:center center}.feedback a.no:hover{background:#be0000;color:#fff}.feedback a.no:hover:before{filter:brightness(100)}section:hover .feedback{opacity:1}.video_chapters{list-style:none;padding:0;margin:0 0 1em;border:1px solid #fafafa;border-top:0}.video_chapters li{padding:.5em}.video_chapters li+li{margin-top:0}.video_chapters li:nth-child(odd){background:#fafafa}.video_chapters li a{display:block;text-decoration:none}.video_chapters li a:hover{text-decoration:underline}.popup,.popupcontent{position:relative;background:#fff;max-width:600px;padding:56px 25px 25px;margin:2em auto}.popup h1:first-child,.popupcontent h1:first-child,.popup h2:first-child,.popupcontent h2:first-child,.popup h3:first-child,.popupcontent h3:first-child,.popup h4:first-child,.popupcontent h4:first-child,.popup h5:first-child,.popupcontent h5:first-child,.popup h6:first-child,.popupcontent h6:first-child{margin-top:0}.popup>*:last-child,.popupcontent>*:last-child{margin-bottom:0}.popup>p,.popupcontent>p{font-size:14px;line-height:1.5em}.popup *+form,.popupcontent *+form{border-top:1px solid #c6c7c8;padding-top:1.75em}body .mfp-bg{background:#04060f;opacity:.65}.leadinModal.leadinModal-v3 .leadin-button{position:relative}.mfp-wrap.hastcs .mfp-content{max-width:800px;max-height:80vh;overflow:hidden}.mfp-wrap.hastcs .mfp-content .popup{height:80vh;overflow:scroll;max-width:800px;padding-bottom:90px;padding-top:50px;box-sizing:border-box}.mfp-wrap.hastcs .mfp-content .popup h1,.mfp-wrap.hastcs .mfp-content .popup h2,.mfp-wrap.hastcs .mfp-content .popup h3,.mfp-wrap.hastcs .mfp-content .popup h4,.mfp-wrap.hastcs .mfp-content .popup h5,.mfp-wrap.hastcs .mfp-content .popup h6{font-size:1rem}.mfp-wrap.hastcs .mfp-content .title{text-align:center;background:#04060f;color:#fff;position:absolute;left:0;top:0;width:100%;padding:1em;box-sizing:border-box;box-shadow:0 0 5px 0px rgba(0,0,0,.4);z-index:2}.mfp-wrap.hastcs .mfp-content .title:after{content:''}.mfp-wrap.hastcs .mfp-content .acceptance{height:70px;position:absolute;left:0;bottom:0;width:100%;background:#fff;z-index:2;padding:1em;box-sizing:border-box;box-shadow:0 0 5px 0px rgba(0,0,0,.4);text-align:center}.mfp-wrap.hastcs .mfp-content .acceptance .calltoaction.inactive{opacity:.5;cursor:default}.mfp-wrap.hastcs .mfp-content .acceptance .calltoaction.inactive:hover:after{height:0}#fundamentalcontent{background:#f2f2f2;font-weight:500;padding:1em;font-size:.85em}#fundamentalcontent h1,#fundamentalcontent h2,#fundamentalcontent h3,#fundamentalcontent h4,#fundamentalcontent h5,#fundamentalcontent h6{font-family:'exo',sans-serif;text-transform:none}#fundamentalcontent ul{list-style:disc;padding-left:1.1em}.mfp-content .popup{background:#fff;padding:2em;border-bottom:0;max-width:600px;margin:0 auto}.mfp-content .popup>.question{text-align:center}.mfp-content .popup>.answer{display:none}.mfp-content .popup#todownload{text-align:center}.mfp-content .popup#cartaddconfirmation,.mfp-content .popup#cartupdateconfirmation{text-align:center}.mfp-content .popup#cartaddconfirmation h2,.mfp-content .popup#cartupdateconfirmation h2{margin-bottom:.25em;font-size:1.5em}.mfp-content .popup#cartaddconfirmation img,.mfp-content .popup#cartupdateconfirmation img{margin:0 auto 2em auto;width:100px;height:100px;border-radius:100%;display:block;border:3px solid #be0000}.mfp-content .popup#cartaddconfirmation p,.mfp-content .popup#cartupdateconfirmation p{font-weight:700;font-size:1.25em;color:#04060f}.mfp-content .popup h1,.mfp-content .popup h2,.mfp-content .popup h3,.mfp-content .popup h4,.mfp-content .popup h5,.mfp-content .popup h6{color:#04060f;font-size:2rem}.mfp-content .popup label,.mfp-content .popup legend{text-align:left}.mfp-content .popup label.hs-error-msg,.mfp-content .popup legend.hs-error-msg{color:#fff}.mfp-content .popup p{font-size:.85em}.mfp-content .popup .poploader{background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/loader.svg) no-repeat center center;background-size:200px 200px;height:0;overflow:hidden;width:100%;padding-bottom:30%;position:relative}.mfp-content .popup .poploader span{position:absolute;left:0;top:50%;color:#fff;text-transform:uppercase;font-size:12px;font-weight:700;text-align:center;width:100%;margin-top:-.5em;background:#04060f}.mfp-content .popup #countdown{width:6em;height:6em;margin:0 auto;position:relative;font-family:'Apercu';font-weight:700}.mfp-content .popup #countdown span,.mfp-content .popup #countdown svg{position:absolute;top:0;width:100%;height:100%;left:0;z-index:1}.mfp-content .popup #countdown span{font-size:4.4rem;line-height:6.2rem;text-align:center;z-index:2}.mfp-close{right:.7em;top:.7em}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.single-stories .mfp-content{position:absolute;left:0;top:8%}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;box-shadow:none;touch-action:manipulation}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:.65;padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Arial,Baskerville,monospace}.mfp-close:hover,.mfp-close:focus{opacity:1}.mfp-close-btn-in .mfp-close{color:#333}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px;white-space:nowrap}.mfp-arrow{position:absolute;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1}.mfp-arrow:before,.mfp-arrow:after{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before{border-top-width:21px;border-bottom-width:21px;opacity:.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before{margin-left:25px;border-right:27px solid #3f3f3f}.mfp-arrow-right{right:0}.mfp-arrow-right:after{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,.6);position:fixed;text-align:center;padding:0}}@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(.75);transform:scale(.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}header{position:fixed;left:0;right:0;top:0;height:50px;background:#fff;z-index:11;border-bottom:1px solid #ccc;box-shadow:0 0 5px -3px #000}#homepage_intro{padding-top:3vw}#homepage_intro img{max-width:100%;height:auto;margin-bottom:.5em}#homepage_intro img.aligncenter{margin:0 auto .5em;display:block}#logo{float:left;display:block;height:25px;margin-top:12px;margin-left:15px;z-index:13;position:relative}#logo img{height:100%;width:auto;display:block}#searchtrigger{position:absolute;color:#fff;right:0;width:50px;height:50px;background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon-search.svg) #be0000 no-repeat center center/50% 50%;top:0;z-index:100;overflow:hidden;text-indent:-9999px;transition:background .3s}#searchtrigger:hover{background-color:#04060f}#mainmenu{position:fixed;left:0;top:0;height:50px;width:100%;z-index:12}#mainmenu+nav{float:right;margin-right:50px;position:relative;z-index:13;font-weight:400}#mainmenu+nav ul li{white-space:nowrap;display:inline-block;height:50px;line-height:50px;padding-left:10px;padding-right:10px;overflow:hidden;font-weight:700;opacity:.5;position:relative;transition:background-color .3s,opacity .3s}#mainmenu+nav ul li.hasdm{opacity:1;padding-left:0}#mainmenu+nav ul li.sales{opacity:1}#mainmenu+nav ul li.sales a{background:#be0000;color:#fff;padding:.25em 1em .25em .5em;border-radius:30px;box-shadow:0 0 5px -3px rgba(0,0,0,.35)}#mainmenu+nav ul li.sales a img{filter:invert(1);transform:scale(.8)}#mainmenu+nav ul li.sales a:hover{background:#04060f}#mainmenu+nav ul li:hover{opacity:1}#mainmenu+nav ul li+li{margin-left:.5em}#mainmenu+nav ul li img{width:1.5em;height:auto;position:relative;top:-.075em;margin-right:.5em}#mainmenu li.apis>ul a{display:block;padding-right:80px}#mainmenu li.apis>ul>li{position:relative;min-width:420px;padding-top:.5em;padding-bottom:.5em}#mainmenu li.apis>ul>li+li{border-top:1px solid #f2f2f2}#mainmenu li.apis>ul>li ul{padding-top:.5em;padding-left:1em}#mainmenu li.apis>ul>li ul li{position:relative}#mainmenu li.apis>ul>li ul li a:hover{font-weight:700}#mainmenu li.apis>ul>li ul li:before{content:'';position:absolute;left:-1em;top:0;width:.8em;height:.7em;box-sizing:border-box;border-left:1px dashed #c6c7c8;border-bottom:1px dashed #c6c7c8}#mainmenu li.apis>ul>li>a{position:relative;z-index:1}#mainmenu li.apis>ul>li>a:hover{font-weight:700}#mainmenu li.apis>ul>li:after{content:'';position:absolute;right:0;top:1.2em;padding:.5em;border-radius:5px;color:#fff;text-transform:uppercase;font-weight:800;font-size:.5em}#mainmenu li.apis>ul>li.graphql:after{content:'GraphQL API';background:#2280c5}#mainmenu li.apis>ul>li.rest:after{content:'REST APIs';background:#00806c}#mainmenu li.apis>ul>li.webservice:after{content:'Web Service';background:#be0000}#mainmenu li.apis>ul>li.tcp:after{content:'NMEA feed';background:#0f447a}#mainmenu>ul{height:50px;position:relative;text-align:left;padding-left:300px}#mainmenu>ul>li{display:inline-block;position:relative;white-space:nowrap;height:50px}#mainmenu>ul>li>ul{padding:10px 20px;background:#fff;box-shadow:0 0 5px -3px #000;position:absolute;top:100%;left:0;display:none}#mainmenu>ul>li:hover>ul{display:block}#mainmenu>ul>li.current-menu-item>a,#mainmenu>ul>li.current-menu-ancestor>a,#mainmenu>ul>li.current-menu-parent>a,#mainmenu>ul>li.current_page_parent>a,#mainmenu>ul>li.current_page_ancestor>a{background:#be0000;color:#fff}#mainmenu>ul>li.current-menu-item>a:hover>a,#mainmenu>ul>li.current-menu-ancestor>a:hover>a,#mainmenu>ul>li.current-menu-parent>a:hover>a,#mainmenu>ul>li.current_page_parent>a:hover>a,#mainmenu>ul>li.current_page_ancestor>a:hover>a{color:#fff}#mainmenu>ul>li.current-menu-item.page-item-2>a{background:#fff;color:#04060f}#mainmenu>ul>li>a{display:inline-block;height:50px;line-height:50px;padding-left:20px;padding-right:20px;overflow:hidden;font-weight:700;position:relative;transition:background-color .3s}#mainmenu>ul>li>a:after{position:absolute;left:0;top:0;width:30px;height:100%;content:'';background-size:60% 60%;background-position:center center;background-repeat:no-repeat}#mainmenu>ul>li#main_search,#mainmenu>ul>li#main_logout{text-indent:-999px;float:right;width:50px}#mainmenu>ul>li#main_search a,#mainmenu>ul>li#main_logout a{display:block;padding:0;width:50px}#mainmenu>ul>li#main_search+li,#mainmenu>ul>li#main_logout+li{margin-left:0}#mainmenu>ul>li#main_search a:after,#mainmenu>ul>li#main_logout a:after{width:50px;background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_search.svg);background-size:35% 35%;background-position:center center;opacity:.5}#mainmenu>ul>li#main_logout a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_logout.svg)}#mainmenu>ul>li#domain_switcher{float:right;height:30px;background:#fff;position:relative;margin-top:11px;margin-right:20px;border:1px solid #ddd;border-radius:5px}#mainmenu>ul>li#domain_switcher>span,#mainmenu>ul>li#domain_switcher>a{display:inline-block;height:auto;box-sizing:border-box;padding:.5em .25em;line-height:16px}#mainmenu>ul>li#domain_switcher>span{float:left;background:#fafafa;border-right:1px solid #ddd;width:30px;border-radius:5px 0 0 5px;line-height:14px;font-weight:800;color:#ccc}#mainmenu>ul>li#domain_switcher>a{float:right;width:125px;text-align:left;padding-left:10px;border-radius:0 5px 5px 0;display:block;position:relative}#mainmenu>ul>li#domain_switcher>a:after{height:28px;width:15px;background:#fafafa;border-left:1px solid #ddd;right:0;top:0;content:'';position:absolute;left:auto;border-radius:0 5px 5px 0}#mainmenu>ul>li#domain_switcher>a>i{position:relative;top:-.15em}#mainmenu>ul>li#domain_switcher>a:hover{color:#04060f}#mainmenu>ul>li#domain_switcher:hover>a{color:#04060f}#mainmenu>ul>li#domain_switcher:hover ul{display:block}#mainmenu>ul>li#domain_switcher ul{display:none;position:absolute;left:29px;top:calc(100% - 2px);padding-left:10px;width:111px;text-align:left;background:#fff;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;padding-top:.35em;padding-bottom:.35em}#mainmenu>ul>li#domain_switcher ul li{padding:.25em 0}#mainmenu>ul>li#domain_switcher ul li a{color:#fff}#mainmenu>ul>li#domain_switcher ul li a.tag{display:block;box-sizing:border-box;width:90px}#mainmenu>ul>li#domain_switcher ul li+li{margin-top:.25em}#mainmenu>ul>li.main_dashboard a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_dashboard.svg);background-size:50% 50%}#mainmenu>ul>li.main_customers a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_company.svg)}#mainmenu>ul>li.main_add_customer a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_company_add.svg)}#mainmenu>ul>li.main_users a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_user.svg);background-position:center 45%;background-size:50% 50%}#mainmenu>ul>li.main_add_user a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_account.svg)}#mainmenu>ul>li.main_tools a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_tools.svg);background-position:center 45%;background-size:50% 50%}#mainmenu>ul>li.main_create_token a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_new_token.svg);background-size:50% 50%}#mainmenu>ul>li.main_tokens a:after{background-image:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_token.svg)}#extendedtoggle{position:absolute;left:50%;margin-left:-25px;width:50px;height:50px;bottom:0}#extendedtoggle:after{top:0;left:0;width:100%;height:100%;position:absolute;content:'';background:url(//documentation.spire.com/wp-content/themes/docs/css/../img/icon_arrow_left.svg) no-repeat center top;background-size:20px 20px;opacity:.3}#extendedtoggle span{color:rgba(255,255,255,.3);font-size:14px;position:absolute;left:0;text-align:center;width:100%;top:23px;font-weight:700;text-transform:uppercase}footer{background:#04060f;color:#fff;padding-top:80px;padding-bottom:155px;font-weight:700;position:relative;z-index:1}footer.simple{padding:0}footer.simple #postfooterlegal .col.col12{border-top:0;padding-bottom:30px;margin-top:0}footer img{width:70%;height:auto}footer #postfooterlegal .col.col12{border-top:1px solid #fff;padding-top:30px;margin-top:20px}footer #postfooterlegal .col.col12 a{transition:color .3s}footer #postfooterlegal .col.col12 a:hover{color:rgba(255,255,255,.7)}footer #postfooterlegal .col.col12>a{margin-right:1.5em}footer #postfooterlegal .col.col12 #legalmenu{padding-top:1em}footer #postfooterlegal .col.col12 #legalmenu li{display:inline-block;padding:0 1em;margin-bottom:.5em}footer #postfooterlegal .col.col12 #legalmenu li+li{border-left:1px solid #fff}footer #postfooterlegal .col.col12 #legalmenu li:first-child{padding-left:0}footer #postfooterlegal .col.col12 #socialicons{float:right;font-size:1.3em}footer #postfooterlegal .col.col12 #socialicons li{float:left;margin-left:1.2em}@media only screen and (max-width:1000px){footer{padding-top:50px;padding-bottom:120px}footer img{width:113px;height:33px;margin-bottom:35px}footer #postfooterlegal .col.col12>a{margin-bottom:1em}footer #postfooterlegal .col.col12 #legalmenu li:first-child{padding-left:0}footer #footermenu{grid-template-columns:31.5% 31.5% 31.5%}footer #footermenu>li{height:6em}footer #footermenu>li:nth-child(1){grid-area:1/1/8/1}footer #footermenu>li:nth-child(2){grid-area:4/1/4/1;height:22em}footer #footermenu>li:nth-child(3){grid-area:1/2/1/2}footer #footermenu>li:nth-child(4){grid-area:2/2/2/2}footer #footermenu>li:nth-child(5){grid-area:3/2/3/2}footer #footermenu>li:nth-child(6){grid-area:1/3/1/3}footer #footermenu>li:nth-child(7){grid-area:2/3/2/3;margin-top:-2em}footer #footermenu>li:nth-child(8){grid-area:3/3/3/3;margin-top:-4em}footer #footermenu>li:nth-child(6),footer #footermenu>li:nth-child(7),footer #footermenu>li:nth-child(8){height:4em;padding-top:0}}@media only screen and (max-width:750px){footer{padding-bottom:80px}footer.simple{padding-bottom:80px}footer #footermenu{grid-template-columns:48.75% 48.75%}footer #footermenu>li{height:auto}footer #footermenu>li:nth-child(1){grid-area:1/1/8/1}footer #footermenu>li:nth-child(2){grid-area:7/1/7/1;margin-top:-21em;height:auto}footer #footermenu>li:nth-child(3){grid-area:1/2/1/2}footer #footermenu>li:nth-child(4){grid-area:2/2/2/2}footer #footermenu>li:nth-child(5){grid-area:3/2/3/2}footer #footermenu>li:nth-child(6){grid-area:4/2/4/2}footer #footermenu>li:nth-child(7){grid-area:5/2/5/2;margin-top:0}footer #footermenu>li:nth-child(8){grid-area:6/2/6/2;margin-top:0}footer #footermenu>li:nth-child(9){grid-area:7/2/7/2}footer #footermenu>li:nth-child(7),footer #footermenu>li:nth-child(8),footer #footermenu>li:nth-child(9){height:auto;padding-top:0}footer #postfooterlegal .col.col12 #legalmenu li{padding:0;display:block}footer #postfooterlegal .col.col12 #legalmenu li+li{margin-top:.5em;border-left:0}footer.simple #postfooterlegal .col.col12{margin-top:0}}img.alignright{float:right;margin:0 0 1em 1em}img.alignleft{float:left;margin:0 1em 1em 0}img.aligncenter{display:block;margin-left:auto;margin-right:auto}.alignright{float:right}.alignleft{float:left}.aligncenter{display:block;margin-left:auto;margin-right:auto}.hidden,[hidden]{display:none !important}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sr-only.focusable:active,.sr-only.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;white-space:inherit;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}@media print{*,*:before,*:after{background:#fff !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#454f59}.token.punctuation{color:#4f4f4f}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#344d00}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#00567a}.token.class-name,.token.function{color:#971c34}.token.important,.token.regex,.token.variable{color:#704900}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;z-index:10;top:.3em;right:.2em;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,.2);box-shadow:0 2px 0 0 rgba(0,0,0,.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover{color:inherit;text-decoration:none}.relevanssi-live-search-results{box-sizing:border-box;-moz-box-sizing:border-box;background:#fff;-webkit-box-shadow:0 0 2px 0 rgba(30,30,30,.4);box-shadow:0 0 2px 0 rgba(30,30,30,.4);border-radius:3px;width:315px;min-height:175px;max-height:300px}.relevanssi-live-search-result p,.relevanssi-live-search-result-status p{font-size:.9em;padding:1em;margin:0;border-bottom:1px solid rgba(30,30,30,.1)}.relevanssi-live-search-result-status p{font-size:.8em;padding:0 1em}.relevanssi-live-search-result--focused{background:#ddd}.relevanssi-live-search-result--focused a{color:#000}.relevanssi-live-search-result:last-of-type p{border-bottom:0}.relevanssi-live-search-result a{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.relevanssi-live-search-instructions{border:0 !important;clip:rect(1px,1px,1px,1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.rlv-has-spinner{width:56px;height:56px;border:8px solid #0052ec;border-right-color:transparent;border-radius:50%;position:relative;animation:loader-rotate 1s linear infinite;margin:1em auto}.rlv-has-spinner:after{content:"";width:8px;height:8px;background:#0052ec;border-radius:50%;position:absolute;top:-1px;left:33px}@keyframes loader-rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.relevanssi-live-search-results{opacity:0;transition:opacity .25s ease-in-out;-moz-transition:opacity .25s ease-in-out;-webkit-transition:opacity .25s ease-in-out;height:0;overflow:hidden;z-index:9999995;position:absolute;display:none}.relevanssi-live-search-results-showing{display:block;opacity:1;height:auto;overflow:auto}.relevanssi-live-search-no-results,.relevanssi-live-search-didyoumean{padding:0 1em}</style><script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"TechArticle","@id":"https://documentation.spire.com/tcp-stream-v2/#article","isPartOf":{"@id":"https://documentation.spire.com/tcp-stream-v2/"},"author":{"name":"Simão Oliveira","@id":"https://documentation.spire.com/#/schema/person/4df42cb1e6de22f486e7c397cbbb7878"},"headline":"TCP Stream v2","datePublished":"2022-09-08T14:15:14+00:00","dateModified":"2022-11-24T16:48:56+00:00","mainEntityOfPage":{"@id":"https://documentation.spire.com/tcp-stream-v2/"},"wordCount":64,"publisher":{"@id":"https://documentation.spire.com/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https://documentation.spire.com/tcp-stream-v2/","url":"https://documentation.spire.com/tcp-stream-v2/","name":"TCP Stream v2 | Spire Maritime Documentation","isPartOf":{"@id":"https://documentation.spire.com/#website"},"datePublished":"2022-09-08T14:15:14+00:00","dateModified":"2022-11-24T16:48:56+00:00","breadcrumb":{"@id":"https://documentation.spire.com/tcp-stream-v2/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://documentation.spire.com/tcp-stream-v2/"]}]},{"@type":"BreadcrumbList","@id":"https://documentation.spire.com/tcp-stream-v2/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://documentation.spire.com/"},{"@type":"ListItem","position":2,"name":"TCP Stream v2"}]},{"@type":"WebSite","@id":"https://documentation.spire.com/#website","url":"https://documentation.spire.com/","name":"Spire Maritime Documentation","description":"Get started with Spire Maritime APIs and Web Services","publisher":{"@id":"https://documentation.spire.com/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://documentation.spire.com/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://documentation.spire.com/#organization","name":"Spire Maritime","url":"https://documentation.spire.com/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://documentation.spire.com/#/schema/logo/image/","url":"https://documentation.spire.com/wp-content/uploads/2022/10/maritime_icon.png","contentUrl":"https://documentation.spire.com/wp-content/uploads/2022/10/maritime_icon.png","width":512,"height":512,"caption":"Spire Maritime"},"image":{"@id":"https://documentation.spire.com/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/satelliteaisdata/","https://twitter.com/aisdata","https://www.linkedin.com/showcase/spire-maritime/"]},{"@type":"Person","@id":"https://documentation.spire.com/#/schema/person/4df42cb1e6de22f486e7c397cbbb7878","name":"Simão Oliveira","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://documentation.spire.com/#/schema/person/image/","url":"https://documentation.spire.com/wp-content/uploads/2022/10/T01T6C4676G-U01TB0PM6S2-ba6089b50aab-512-150x150.jpg","contentUrl":"https://documentation.spire.com/wp-content/uploads/2022/10/T01T6C4676G-U01TB0PM6S2-ba6089b50aab-512-150x150.jpg","caption":"Simão Oliveira"}}]}</script> <link rel='dns-prefetch' href='//spire.com' /><link rel='dns-prefetch' href='//cdn.jsdelivr.net' /><link rel='dns-prefetch' href='//cdnjs.cloudflare.com' /><link rel='dns-prefetch' href='//fonts.googleapis.com' /><link rel='preload' as='style' crossorigin='anonymous' id='exo-font-preload-css' href='https://fonts.googleapis.com/css2?family=Exo%3Awght%40300%3B400%3B500%3B700%3B800&#038;display=swap' type='text/css' media='' /><link rel='preload' as='font' type='font/woff2' crossorigin='anonymous' id='apercu-font-preload-css' href='https://documentation.spire.com/wp-content/themes/docs/font/apercu-mono-regular.woff2' type='text/css' media='' /><link rel='stylesheet' id='exo-font-css' href='https://fonts.googleapis.com/css2?family=Exo%3Awght%40300%3B400%3B500%3B700%3B800&#038;display=swap' type='text/css' media='' /><link rel='stylesheet' id='magnific-css' href='https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/magnific-popup.css?ver=6.7.1' type='text/css' media='' /> <script defer type="text/javascript" src="https://documentation.spire.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_5226652de4f7a179e760bf7e9a3d0232.js?ver=1679901433" id="darkmode_apply-js"></script> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://documentation.spire.com/xmlrpc.php?rsd" /><link rel='shortlink' href='https://documentation.spire.com/?p=162' /><link rel="icon" href="https://documentation.spire.com/wp-content/uploads/2022/10/cropped-maritime_icon-32x32.png" sizes="32x32" /><link rel="icon" href="https://documentation.spire.com/wp-content/uploads/2022/10/cropped-maritime_icon-192x192.png" sizes="192x192" /><link rel="apple-touch-icon" href="https://documentation.spire.com/wp-content/uploads/2022/10/cropped-maritime_icon-180x180.png" /><meta name="msapplication-TileImage" content="https://documentation.spire.com/wp-content/uploads/2022/10/cropped-maritime_icon-270x270.png" /> <script defer src="data:text/javascript;base64,dmFyIGJ1c2luZXNzMT0nbWFyaXRpbWUnOw=="></script> <script defer type="text/javascript" src="https://cookie-cdn.cookiepro.com/consent/de7f49f2-6902-4173-9229-932c6d04aac7/OtAutoBlock.js" ></script> <script defer src="https://cookie-cdn.cookiepro.com/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="de7f49f2-6902-4173-9229-932c6d04aac7" ></script> <script defer src="data:text/javascript;base64,CiAgICBmdW5jdGlvbiBPcHRhbm9uV3JhcHBlcigpIHsgfQogICAg"></script> <script defer src="data:text/javascript;base64,KGZ1bmN0aW9uKHcsZCxzLGwsaSl7d1tsXT13W2xdfHxbXTt3W2xdLnB1c2goeydndG0uc3RhcnQnOgogICAgbmV3IERhdGUoKS5nZXRUaW1lKCksZXZlbnQ6J2d0bS5qcyd9KTt2YXIgZj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdLAogICAgaj1kLmNyZWF0ZUVsZW1lbnQocyksZGw9bCE9J2RhdGFMYXllcic/JyZsPScrbDonJztqLmFzeW5jPXRydWU7ai5zcmM9CiAgICAnaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPScraStkbDtmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosZik7CiAgICB9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2RhdGFMYXllcicsJ0dUTS1OMzI2M1ZDJyk7"></script> </head><body class="page-template-default page page-id-162 page-parent"> <script defer src="data:text/javascript;base64,dmFyIGFqYXh1cmw9J2h0dHBzOi8vZG9jdW1lbnRhdGlvbi5zcGlyZS5jb20vd3AtYWRtaW4vYWRtaW4tYWpheC5waHAnOw=="></script> <script defer src="data:text/javascript;base64,dmFyIHNpdGVUaXRsZT0nU3BpcmUgTWFyaXRpbWUgRG9jdW1lbnRhdGlvbic7"></script> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N3263VC" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <script id="hs-script-loader" type="text/plain" class="optanon-category-C0004" async defer src="//js.hs-scripts.com/6779491.js"></script> <header> <a href="https://documentation.spire.com" id="logo"><img width="249" height="25" src="https://documentation.spire.com/wp-content/themes/docs/img/spire_maritime_documentation_logo.svg" alt="Logo of the Spire Maritime Documentation platform"/></a><div id="mobilemenuwrapper"><nav id="mainmenu"><ul><li id="menu-item-84" class="apis menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children menu-item-84"><a href="https://documentation.spire.com/"><span>APIs &#038; Solutions</span></a><ul class="sub-menu"><li id="menu-item-23" class="graphql menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-23"><a href="https://documentation.spire.com/maritime-2-0/"><span>Maritime 2.0</span></a><ul class="sub-menu"><li id="menu-item-282" class="graphql menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-282"><a href="https://documentation.spire.com/maritime-2-0/vessels/"><span>Vessels 2.0</span></a><ul class="sub-menu"><li id="menu-item-1448" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1448"><a href="https://documentation.spire.com/maritime-2-0/vessels/output-objects/validated-static-data/"><span>Validated Static Data</span></a></li><li id="menu-item-1311" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1311"><a href="https://documentation.spire.com/maritime-2-0/vessels/output-objects/vessel-characteristics/"><span>Vessel characteristics</span></a></li><li id="menu-item-1172" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1172"><a href="https://documentation.spire.com/maritime-2-0/vessels/output-objects/vessel-to-port-eta/"><span>Vessel to Port ETA</span></a></li></ul></li><li id="menu-item-1101" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1101"><a href="https://documentation.spire.com/maritime-2-0/port-events/"><span>Port Events</span></a></li><li id="menu-item-1424" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1424"><a href="https://documentation.spire.com/maritime-2-0/port-congestion/"><span>Port Congestion</span></a></li><li id="menu-item-1480" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1480"><a href="https://documentation.spire.com/routing-api/"><span>Routing</span></a></li></ul></li><li id="menu-item-115" class="webservice menu-item menu-item-type-post_type menu-item-object-page menu-item-115"><a href="https://documentation.spire.com/latest-vessel-information-lvi/"><span>Latest Vessel Information (LVI)</span></a></li><li id="menu-item-142" class="webservice menu-item menu-item-type-post_type menu-item-object-page menu-item-142"><a href="https://documentation.spire.com/historical-vessel-points-and-tracks-hvp-hvt/"><span>Historical Vessel Points / Tracks (HVP/HVT)</span></a></li><li id="menu-item-1321" class="webservice menu-item menu-item-type-post_type menu-item-object-page menu-item-1321"><a href="https://documentation.spire.com/ais-position-validation/"><span>AIS Position Validation</span></a></li><li id="menu-item-188" class="tcp menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-162 current_page_item menu-item-188"><a href="https://documentation.spire.com/tcp-stream-v2/" aria-current="page"><span>TCP Stream v2</span></a></li><li id="menu-item-355" class="tcp menu-item menu-item-type-post_type menu-item-object-page menu-item-355"><a href="https://documentation.spire.com/uniproxy/"><span>UniProxy</span></a></li><li id="menu-item-663" class="rest menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-663"><a href="#"><span>Legacy</span></a><ul class="sub-menu"><li id="menu-item-26" class="rest menu-item menu-item-type-post_type menu-item-object-page menu-item-26"><a href="https://documentation.spire.com/vessels-api/"><span>Vessels API</span></a></li><li id="menu-item-208" class="rest menu-item menu-item-type-post_type menu-item-object-page menu-item-208"><a href="https://documentation.spire.com/messages-api/"><span>Messages API</span></a></li><li id="menu-item-189" class="rest menu-item menu-item-type-post_type menu-item-object-page menu-item-189"><a href="https://documentation.spire.com/historical-positions-api/"><span>Historical Positions API</span></a></li></ul></li></ul></li><li id="menu-item-187" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-187"><a href="https://documentation.spire.com/ais-fundamentals/"><span>AIS Fundamentals</span></a></li><li id="menu-item-366" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-366"><a href="https://documentation.spire.com/blog/"><span>Blog</span></a></li><li id="menu-item-1496" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1496"><a href="https://spire.com/"><span>Visit Spire Global</span></a></li></ul></nav><nav><ul><li class="sales"><a href="https://spire.com/maritime/configure-your-ais-solution" target="_blank" title="Contact Spire sales for API access - opens in a new tab"><img height="23" width="23" src="https://documentation.spire.com/wp-content/themes/docs/img/icon-support.svg?v1" alt="Sales icon"/>Contact sales</a></li><li><a href="https://status.spire.com" target="_blank"><img height="23" width="23" src="https://documentation.spire.com/wp-content/themes/docs/img/icon-status.svg" alt="Status icon"/>Platform status</a></li><li><a href="https://documentation.spire.com/make-a-support-request/" target="_blank"><img height="23" width="23" src="https://documentation.spire.com/wp-content/themes/docs/img/icon-question.svg" alt="Support icon"/>Get support</a></li><li class="hasdm"> <a href="javascript:void(0)" id="darkmodetoggle" title="Toggle between light/dark mode"></a></li></ul></nav></div> <a href="javascript:void(0);" id="searchtrigger">Search</a> <a href="javascript:void(0);" id="mobiletrigger">Open menu</a></header><main><nav id="docmap"><div><ul><li><a href="#tcp-stream-v2">TCP Stream v2</a></li><li class=""> <a href="#the-nmea-message-encoding-format">NMEA message encoding format</a></li><li class="has-sub-menu"> <a href="#tcp-server-behavior">TCP server behavior</a><ul class="sub-menu"><li class=""><a href="#ais-message-delivery">AIS Message Delivery</a></li><li class=""><a href="#handling-of-interrupted-connections">Handling of interrupted connections</a></li></ul></li><li class="has-sub-menu"> <a href="#using-the-tcp-stream">Using the TCP stream</a><ul class="sub-menu"><li class=""><a href="#connection-to-the-tcp-server">Connection to the TCP server</a></li><li class=""><a href="#tcp-stream-ip-addresses">TCP stream IP addresses</a></li><li class=""><a href="#recommended-reconnection-strategy">Recommended reconnection strategy</a></li><li class=""><a href="#interruptions-continue-where-left-off">Interruptions continue where left off</a></li><li class=""><a href="#handling-connection-lag">Handling connection lag</a></li><li class="has-sub-menu"><a href="#updating-the-service-checkpoint">Updating the service checkpoint</a><ul class="sub-menu"><li class=""><a href="#setting-checkpoint-to-a-specified-time">Setting checkpoint to a specified time</a></li><li class=""><a href="#setting-checkpoint-to-the-latest-message-time">Setting checkpoint to the latest message time</a></li><li class=""><a href="#forced-reconnect-after-updating-the-service-checkpoint">Forced reconnect after updating the service checkpoint</a></li></ul></li><li class=""><a href="#multipart-messages">Multipart messages</a></li><li class=""><a href="#example-connection-python-code">Example connection Python code</a></li></ul></li><li class="has-sub-menu"> <a href="#enhancements-over-v1">Enhancements over v1</a><ul class="sub-menu"><li class=""><a href="#additional-terrestrial-ais">Additional Terrestrial AIS</a></li><li class=""><a href="#additional-nmea-tags">Additional NMEA Tags</a></li><li class=""><a href="#additional-checkpoint-controls">Additional checkpoint controls</a></li><li class=""><a href="#performance">Performance</a></li></ul></li></ul></div> <label id="chooser"> <select name="sectionchooser" id="sectionchooser"></select> </label></nav><div id="content"><section data-id="162" id="tcp-stream-v2" class="level1 " data-url="https://documentation.spire.com/tcp-stream-v2/"><div class="wrapper clearfix"><div class="col col7"><h1>TCP Stream v2</h1><p class="lead">Spire Maritime&#8217;s TCP Stream provides AIS Data in NMEA format like shown in the next section. This service has been re-developed to scale for performance with the continually expanding data volumes of the Spire AIS service.</p><p>Our data volumes have grown around 300% in the last 2 years and our Satellite AIS data volumes have grown 30% in just the first 3 months of 2021.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="162" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="162" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ac12b"></div></div></div></section><section data-id="182" id="the-nmea-message-encoding-format" class="level2 " data-url="https://documentation.spire.com/tcp-stream-v2/the-nmea-message-encoding-format/"><div class="wrapper clearfix"><div class="col col7"><h2>The NMEA message encoding format</h2><p>The National Marine Electronics Association (NMEA) controls the standard for encoded AIS messages.</p><p>The Spire Maritime TCP Feed sends encoded AIS messages in the NMEA 0183 v4.0 format with a timestamp <code>TAG</code> block as a prefix.</p><p>Some example messages from the Spire Maritime TCP Feed are below:</p><pre><code data-prismjs-copy="Copy to clipboard">\c:1503079500*55\!AIVDM,1,1,,B,C6:b0Kh09b3t1K4ChsS2FK008NL&gt;`2CT@2N000000000S4h8S400,0*50 \c:1503079517*53\!AIVDM,1,1,,B,16:Vk1h00g8O=vRBDhNp0nKp0000,0*40 \c:1503079517*53\!AIVDM,1,1,,B,18155hh00u0DEU`N1F@Bg22R06@D,0*60 \c:1503079517*53\!AIVDM,1,1,,A,83aGFQ@j2ddtMH1b@g?b`7mL0,0*55 \c:1503079517*53\!AIVDM,2,1,9,A,53m@FJ400000hT5&lt;0008E8q@TpF000000000000T2P3425rg0:53kThQDQh0,0*48 \c:1503079517*53\!AIVDM,2,2,9,A,00000000000,2*2D \c:1503079516*52\!AIVDM,1,1,,A,13oP50Oi420UAtPgp@UPrP1d01,0*1A \c:1503079516*52\!AIVDM,1,1,,B,B3mISo000H;wsB8SetMnww`5oP06,0*7C \c:1503079517*53\!AIVDM,2,1,0,B,53aIjwh000010CSK7R04lu8F222222222222221?9@&lt;297?o060@C51D`888,0*1B</code></pre><p><a href="https://www.nmea.org/nmea-0183.html" target="_blank" rel="noopener">A detailed breakdown of the NMEA 0183 v4.00 format can be found in NMEA&#8217;s website</a></p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="182" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="182" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ac396"></div></div></div></section><section data-id="183" id="tcp-server-behavior" class="level2 titleonly" data-url="https://documentation.spire.com/tcp-stream-v2/tcp-server-behavior/"><div class="wrapper clearfix"><div class="col col7"><h2>TCP server behavior</h2></div></div></section><section data-id="184" id="ais-message-delivery" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/tcp-server-behavior/ais-message-delivery/"><div class="wrapper clearfix"><div class="col col7"><h3>AIS Message Delivery</h3><p>AIS messages are delivered in sentences. Each sentence is separated by one &#8220;line feed&#8221; (<code>LF</code> / &#8220;<code>\n</code>&#8220;) character.</p><p>AIS messages that comprise of multiple sentences will stream these adjacent sentences in order.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="184" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="184" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ac811"></div></div></div></section><section data-id="185" id="handling-of-interrupted-connections" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/tcp-server-behavior/handling-of-interrupted-connections/"><div class="wrapper clearfix"><div class="col col7"><h3>Handling of interrupted connections</h3><p>If your TCP client gets briefly disabled for any reason, our TCP server uses a cursor to keep track of the last successfully sent AIS message. Once your client reconnects, the cursor indicates the last received message in the stream so no messages get skipped.</p><p>If your TCP client is disconnected for an extended period of time (several days, for instance), upon reconnection, it will begin streaming AIS messages that had been published within the past three hours.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="185" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="185" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460aca87"></div></div></div></section><section data-id="169" id="using-the-tcp-stream" class="level2 titleonly" data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/"><div class="wrapper clearfix"><div class="col col7"><h2>Using the TCP stream</h2></div></div></section><section data-id="170" id="connection-to-the-tcp-server" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/connection-to-the-tcp-server/"><div class="wrapper clearfix"><div class="col col7"><h3>Connection to the TCP server</h3><p>To be able to use the Spire AIS TCP Service you will need an authorization token, which is used to authenticate the service.</p><h4>Connection initiation</h4><p>For TCP connections, client systems must open a TCP socket connection to the Spire service on the Service Address : <code>streamingv2.ais.spire.com</code>using Port number: <code>56784</code>.</p><p>To initiate the stream of messages, and initial authentication string must be sent as below:</p><pre><code data-prismjs-copy="Copy to clipboard">A|T|&lt;auth_token_goes_here&gt;</code></pre><p>Note: Depending on which system you are using, you might want to send a new line ‘<code>\n</code>’ to make sure that the token is sent in one piece directly.</p><p>If connection is successful then the stream of AIS data in NMEA format will start as shown in the example below. This can also be used to test the connectivity on your side.</p><h5>Example:</h5><p><strong>Service connection</strong></p><pre><code data-prismjs-copy="Copy to clipboard"><code>nc streamingv2.ais.spire.com 56784 A|T|USER_TOKEN_HERE</code></code></pre><p><strong>First 3 results of AIS messages being returned</strong></p><pre><code data-prismjs-copy="Copy to clipboard">\s:terrestrial,c:1615991449*52\!AIVDM,1,1,,B,B6:bqEh00B1qq7SBon1Tp0HT0000,0*38 \s:terrestrial,c:1615991451*5B\!AIVDM,1,1,,B,133&lt;6J`P00v:QILEV0=v4?wV25ip,0*20 \s:terrestrial,c:1615991451*5B\!AIVDM,1,1,,A,83aDqqhj2d&lt;dd=v&lt;u0I0N@J53900,0*50</code></pre><p>Once your connection has been established, AIS messages should begin streaming into your client.</p><p><strong>Please note that it can take up to 60 seconds for the TCP server to start up a new stream after sending your token. </strong></p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="170" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="170" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ace8f"></div></div></div></section><section data-id="629" id="tcp-stream-ip-addresses" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/tcp-stream-ip-addresses/"><div class="wrapper clearfix"><div class="col col7"><h3>TCP stream IP addresses</h3><p>The TCP addresses used for streamingv2.ais.spire.com are <code>35.81.96.111</code>, <code>44.236.83.108</code> and <code>52.39.55.110</code> .</p><p>Confirmed by the network test shown below:</p><pre><code data-prismjs-copy="Copy to clipboard">; &lt;&lt;&gt;&gt; DiG 9.10.6 &lt;&lt;&gt;&gt; streamingv2.ais.spire.com ;; global options: +cmd ;; Got answer: ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 49143 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;streamingv2.ais.spire.com. IN A ;; ANSWER SECTION: streamingv2.ais.spire.com. 24 IN A 35.81.96.111 streamingv2.ais.spire.com. 24 IN A 44.236.83.108 streamingv2.ais.spire.com. 24 IN A 52.39.55.110 ;; Query time: 10 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Tue Dec 12 15:29:40 UTC 2023 ;; MSG SIZE rcvd: 102</code></pre><p>Matches the elastic IP address associated with the network load balancer for TCP.</p><p>Confirmed 12-December-2023 as having not changed since November 2023 when fixed networking addresses were configured for the service.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="629" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="629" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ad0e2"></div></div></div></section><section data-id="171" id="recommended-reconnection-strategy" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/recommended-reconnection-strategy/"><div class="wrapper clearfix"><div class="col col7"><h3>Recommended reconnection strategy</h3><p>The TCP server should keep your connection alive indefinitely and send keep-alives every 15 minutes to your client, however, exceptions still happen. Occasionally there might still be instances of unexpected disconnects to the TCP feed. In these cases, you can simply reconnect, re-authenticate with your token and the data stream will resume.</p><p>In order to minimize loss of data and impact on latency, we recommend setting up a reconnection method that automatically acts within an hour of any unexpected disconnect.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="171" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="171" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ad2b7"></div></div></div></section><section data-id="172" id="interruptions-continue-where-left-off" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/interruptions-continue-where-left-off/"><div class="wrapper clearfix"><div class="col col7"><h3>Interruptions continue where left off</h3><p>The behaviour of the TCP service is to provide a continuous stream of AIS messages in the order that they are received by Spire systems. If the service stops, due to disconnection or client system problems, then if re-connecting within 7 days from disconnection, the stream of data will continue from the time of disconnection and no data will be missed.</p><p>If the service is disconnected for more multiple hours or days then it can cause a large backlog of now old data to be streamed before the service catches up to current time and entirely new messages are received.</p><p>If the service is disconnected for more than 7 days then data will be streamed from the current time and only new messages are received. In this situation <a href="https://spire.com/developers/support/">please contact Spire Maritime sales engineering</a> to request a backfill of historical data that has been missed.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="172" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="172" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ad476"></div></div></div></section><section data-id="173" id="handling-connection-lag" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/handling-connection-lag/"><div class="wrapper clearfix"><div class="col col7"><h3>Handling connection lag</h3><p>If your system is experiencing connection lag (ie. the data you are receiving is well behind real-time results as indicated by the unix timestamp [<code>c:</code>]), we recommend reviewing your system to see where scaling is necessary to cope with the increased data volume and speed from the TCP V2 feed.</p><p>Once the system has been adjusted, <a class="scrolltoelement" href="#updating-the-service-checkpoint">refer to the &#8220;Updating the Service Checkpoint&#8221; section</a> to set the checkpoint to a specified time or to the latest message time (real-time).</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="173" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="173" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ad6a0"></div></div></div></section><section data-id="174" id="updating-the-service-checkpoint" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/updating-the-service-checkpoint/"><div class="wrapper clearfix"><div class="col col7"><h3>Updating the service checkpoint</h3><p>In the V2 TCP stream service it is possible to update the service checkpoint that specifies where in the stream of data service will continue from.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="174" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="174" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ad851"></div></div></div></section><section data-id="175" id="setting-checkpoint-to-a-specified-time" class="level4 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/updating-the-service-checkpoint/setting-checkpoint-to-a-specified-time/"><div class="wrapper clearfix"><div class="col col7"><h4>Setting checkpoint to a specified time</h4><p>To reset your TCP stream service to start from a particular point in time, pass the authentication token string as normal followed by a date time string in the format <code>YYYY-MM-DDTHH:MM:SS.MMMZ</code>.</p><p>Note the time must be in UTC (zulu time).</p><p><strong>Example authentication to set the TCP stream checkpoint to a given time</strong></p><pre><code data-prismjs-copy="Copy to clipboard">A|T|&lt;your-token&gt;|2021-03-08T11:45:09.840Z`</code></pre><p>Note the checkpoint can be set up to 7 days in the past and times most be specified in UTC.</p><p><strong>Example of the service checkpoint reset request after which the connection is reset.</strong></p><p><code>nc streamingv2.ais.spire.com 56784</code> <code>A|T|USER_TOKEN_HERE|2021-03-17T16:45:09.840Z</code></p><p>To stream data, <a class="scrolltoelement" href="#forced-reconnect-after-updating-the-service-checkpoint">connection must be established again</a>.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="175" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="175" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ada5b"></div></div></div></section><section data-id="176" id="setting-checkpoint-to-the-latest-message-time" class="level4 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/updating-the-service-checkpoint/setting-checkpoint-to-the-latest-message-time/"><div class="wrapper clearfix"><div class="col col7"><h4>Setting checkpoint to the latest message time</h4><p>To reset your TCP stream service to start from a the time of the most recent message in your service, pass the authentication token string as normal followed by the label <code>resetToLatest</code>.</p><p><strong>Example authentication to set the TCP stream checkpoint to the latest message time</strong></p><pre><code data-prismjs-copy="Copy to clipboard">A|T|&lt;your-token&gt;|resetToLatest</code></pre><p><strong>Example of the service checkpoint reset request after which the connection is reset.</strong></p><pre><code data-prismjs-copy="Copy to clipboard">nc streamingv2.ais.spire.com 56784 A|T|USER_TOKEN_HERE|resetToLatest</code></pre><p>To stream data, <a class="scrolltoelement" href="#forced-reconnect-after-updating-the-service-checkpoint">connection must be established again</a>.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="176" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="176" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460adc88"></div></div></div></section><section data-id="178" id="forced-reconnect-after-updating-the-service-checkpoint" class="level4 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/updating-the-service-checkpoint/forced-reconnect-after-updating-the-service-checkpoint/"><div class="wrapper clearfix"><div class="col col7"><h4>Forced reconnect after updating the service checkpoint</h4><p>After setting a checkpoint timestamp, or the checkpoint reset label <code>resetToLatest</code>, the TCP service will update the checkpoint and disconnect.</p><p>You will need to connect again and pass auth string as usual `<code>A|T|</code>` to get the data from the new checkpoint.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="178" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="178" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ade41"></div></div></div></section><section data-id="180" id="multipart-messages" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/multipart-messages/"><div class="wrapper clearfix"><div class="col col7"><h3>Multipart messages</h3><p>AIS message 5 is commonly received in multiple parts, generally 2 message sentences. Spire Maritime AIS TCP Stream v2 provides grouping tags as shown below. Optionally for users who require it, this feature may be disabled <a href="https://spire.com/developers/support/" target="_blank" rel="noopener">upon request to Spire Maritime sales engineering</a>.</p><p><strong>Example of a multipart AIS message 5 showing the NMEA compliant group tag</strong></p><pre><code data-prismjs-copy="Copy to clipboard">\g:1-2-1,s:terrestrial,c:1615816351*11\!AIVDM,2,1,1,A,53kiP6023Ps@=5Hh000T@60&gt;p00000000000000l1@E:140Ht00000000000,0*3B \g:2-2-1*6C\!AIVDM,2,2,1,A,00000000000,2*25 \g:1-2-2,s:terrestrial,c:1615816351*12\!AIVDM,2,1,2,B,543Kbi000000DpEJ220M&gt;oS8000000000000001S3HJ366ShN6kRBkk0AE`8,0*2E \g:2-2-2*6F\!AIVDM,2,2,2,B,88888888880,2*25 \g:1-2-3,s:terrestrial,c:1615816351*13\!AIVDM,2,1,3,B,53mA9&lt;42=Ti`hm&lt;B220&lt;thu:0H4q@5=V2222220t3c3BB6iWNACSklk88888,0*3F \g:2-2-3*6E\!AIVDM,2,2,3,B,88888888880,2*24 \g:1-2-4,s:terrestrial,c:1615816351*14\!AIVDM,2,1,4,A,53aLlsP0000109U@0008A&gt;10Thu@00000000000j1@63340003@000000000,0*7D \g:2-2-4*69\!AIVDM,2,2,4,A,00000000000,2*20 \g:1-2-5,s:terrestrial,c:1615816351*15\!AIVDM,2,1,5,A,544alp400001DU`6220&lt;50U@4r1`4@u8u`PqV20l1HB53800094iEPDm3l3k,0*4E \g:2-2-5*68\!AIVDM,2,2,5,A,88888888880,2*21</code></pre><p><strong>Sample TCP Stream results </strong></p><p>From May 2023, the source tag for satelite received AIS messages will fixed to the value satellite. Satellite ID may be provided by special arrangement only.</p><pre><code data-prismjs-copy="Copy to clipboard">\s:terrestrial,c:1615816351*52\!AIVDM,1,1,,A,342O;g@P@61tAMRF00EK@8;00&gt;@&lt;,0*34 \s:terrestrial,c:1615816351*52\!AIVDM,1,1,,B,144i@9P0002f57bIPLw&gt;46vv2&gt;@&lt;,0*3E \s:terrestrial,c:1615816309*5F\!AIVDM,1,1,,B,152blF0PADIGC@t@hw=sO9;R0p:f,0*55 \s:terrestrial,c:1615816351*52\!AIVDM,1,1,,B,13aFdSOP0OPO::6MqC@3ugvv2&gt;`&lt;,0*30 \g:1-2-9,s:terrestrial,c:1615816351*19\!AIVDM,2,1,9,B,53c4vr82&lt;ciI0D&lt;N220DhU&lt;48E@R222222222217=@&lt;99toa0=nQA@TUAiiO,0*16 \g:2-2-9*64\!AIVDM,2,2,9,B,R5C38888880,2*39 \g:1-2-10,s:terrestrial,c:1615816351*21\!AIVDM,2,1,0,B,53c4vr82&lt;ciI0D&lt;N220DhU&lt;48E@R222222222217=@&lt;99toa0=nQA@TUAiiO,0*1F \g:2-2-10*5C\!AIVDM,2,2,0,B,R5C38888880,2*30 \s:terrestrial,c:1615816351*52\!AIVDM,1,1,,B,13GQ3J?OiewluSJHkUO@HP:v0D10,0*1B \s:dynamic,c:1615815280*4C\!AIVDM,1,1,,A,B3:GbB006B=KfIU;cUAfcwP00000,0*2C \s:dynamic,c:1615815299*44\!AIVDM,1,1,,A,15D2E4?P005gV8F7OW``IVEp0000,0*35 \s:dynamic,c:1615815447*41\!AIVDM,1,1,,A,14`Ut8gP00Ll``IjiVgu?a7p0000,0*5A \s:dynamic,c:1615815539*49\!AIVDM,1,1,,A,17liV?OP008&lt;IrWv5qMtg?wp0000,0*6F \s:dynamic,c:1615815557*41\!AIVDM,1,1,,A,13:1wR?P301tHkNRF4wIC7Op0000,0*1B \s:satellite,c:1615815822*0A\!AIVDM,1,1,,A,14eG;oh2@0o;eDtL@&gt;37Sn140@Do,0*2B \s:satellite,c:1615815717*03\!AIVDM,1,1,,B,4030p&lt;QvDoeainQABdNN8=7005bT,0*66 \s:satellite,c:1615815943*0C\!AIVDM,1,1,,B,14eHUbsP1&gt;o&lt;P8PL6Vt2cww:08EW,0*54 \s:satellite,c:1615815898*0B\!AIVDM,1,1,,B,1815;0001lD=tTTM32?SB2eV05bh,0*1F \s:satellite,c:1615815976*0A\!AIVDM,1,1,,B,B4eGR9000=fSWF7?;aoQ0c4QnDNr,0*7F \s:satellite,c:1615815977*0B\!AIVDM,1,1,,B,14QSvp7000l96t8NvGnto`:F0&lt;0B,0*64</code></pre><p>Prior to May 2023 clients could receive the NORAD satellite ID in the source tag for satelite received AIS messages. An example of this is below</p><pre><code data-prismjs-copy="Copy to clipboard">\s:terrestrial,c:1615816351*52\!AIVDM,1,1,,A,342O;g@P@61tAMRF00EK@8;00&gt;@&lt;,0*34 \s:terrestrial,c:1615816351*52\!AIVDM,1,1,,B,144i@9P0002f57bIPLw&gt;46vv2&gt;@&lt;,0*3E \s:terrestrial,c:1615816309*5F\!AIVDM,1,1,,B,152blF0PADIGC@t@hw=sO9;R0p:f,0*55 \s:terrestrial,c:1615816351*52\!AIVDM,1,1,,B,13aFdSOP0OPO::6MqC@3ugvv2&gt;`&lt;,0*30 \g:1-2-9,s:terrestrial,c:1615816351*19\!AIVDM,2,1,9,B,53c4vr82&lt;ciI0D&lt;N220DhU&lt;48E@R222222222217=@&lt;99toa0=nQA@TUAiiO,0*16 \g:2-2-9*64\!AIVDM,2,2,9,B,R5C38888880,2*39 \g:1-2-10,s:terrestrial,c:1615816351*21\!AIVDM,2,1,0,B,53c4vr82&lt;ciI0D&lt;N220DhU&lt;48E@R222222222217=@&lt;99toa0=nQA@TUAiiO,0*1F \g:2-2-10*5C\!AIVDM,2,2,0,B,R5C38888880,2*30 \s:terrestrial,c:1615816351*52\!AIVDM,1,1,,B,13GQ3J?OiewluSJHkUO@HP:v0D10,0*1B \s:dynamic,c:1615815280*4C\!AIVDM,1,1,,A,B3:GbB006B=KfIU;cUAfcwP00000,0*2C \s:dynamic,c:1615815299*44\!AIVDM,1,1,,A,15D2E4?P005gV8F7OW``IVEp0000,0*35 \s:dynamic,c:1615815447*41\!AIVDM,1,1,,A,14`Ut8gP00Ll``IjiVgu?a7p0000,0*5A \s:dynamic,c:1615815539*49\!AIVDM,1,1,,A,17liV?OP008&lt;IrWv5qMtg?wp0000,0*6F \s:dynamic,c:1615815557*41\!AIVDM,1,1,,A,13:1wR?P301tHkNRF4wIC7Op0000,0*1B \s:44405,c:1615815822*0A\!AIVDM,1,1,,A,14eG;oh2@0o;eDtL@&gt;37Sn140@Do,0*2B \s:44405,c:1615815717*03\!AIVDM,1,1,,B,4030p&lt;QvDoeainQABdNN8=7005bT,0*66 \s:44405,c:1615815943*0C\!AIVDM,1,1,,B,14eHUbsP1&gt;o&lt;P8PL6Vt2cww:08EW,0*54 \s:44405,c:1615815898*0B\!AIVDM,1,1,,B,1815;0001lD=tTTM32?SB2eV05bh,0*1F \s:44405,c:1615815976*0A\!AIVDM,1,1,,B,B4eGR9000=fSWF7?;aoQ0c4QnDNr,0*7F \s:44405,c:1615815977*0B\!AIVDM,1,1,,B,14QSvp7000l96t8NvGnto`:F0&lt;0B,0*64</code></pre></div><div class="col col1">&nbsp;</div><div class="col col4"><h4>Understanding the AIS message stream format</h4><dl><dt><code>\g:1-2-5</code> and <code>\g:2-2-5</code> <em>group tag</em></dt><dd>Contains 3 parts in a <code>X-Y-Z</code> format:<br /> <code>X</code> is the fragment number<br /> <code>Y</code> is the count of message fragments<br /> <code>Z</code> is the sequence number that joins the fragments together</dd><dt><code>\s</code> <em>source tag</em></dt><dd>Indicates the AIS source of the received AIS message. Values are:<br /> <code>terrestrial</code> for AIS received from terrestrial, land based, AIS receivers.<br /> <code>dynamic</code> for AIS received from dynamic AIS, vessel based, AIS receivers.<br /> <code>from May 2023 the value is satellite for all satellite received AIS messages </code></dd><dd><code>Prior to May 2023 some clients had the Spire satellite NORAD ID or satellite name returned</code> for messages received from Spire satellites. This behaviour is now obsoleted</dd><dd></dd><dd></dd><dt><code>\c:1601972308*58</code></dt><dd>Message timestamp and tags checksum</dd><dt><code>!AIVDM</code></dt><dd>Message header</dd><dt><code>2</code></dt><dd>Message sentence count</dd><dt><code>1 or 2 </code></dt><dd>Message sentence number</dd><dt><code>5</code></dt><dd>Message number</dd><dt><code>A</code> or <code>B</code></dt><dd>AIS channel</dd><dt>(the rest of the message record)</dt><dd>Encoded AIS data and checksum</dd></dl></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="180" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="180" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ae1be"></div></div></div></section><section data-id="181" id="example-connection-python-code" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/using-the-tcp-stream/example-connection-python-code/"><div class="wrapper clearfix"><div class="col col7"><h3>Example connection Python code</h3><p>A simple python script for connecting to the Spire TCP service is available for testing.</p><p><a class="calltoaction" href="https://drive.google.com/drive/folders/1UHH7vGTVZCxqrATQGWsMkFtV0RdPt4Nx" target="_blank" rel="noopener">Download the example script</a></p><p>It can be called as follows:</p><pre><code data-prismjs-copy="Copy to clipboard">python call_spire_tcp_feed_parameters.py test_tcp.txt 100 streamingv2.ais.spire.com 56784 2 &lt;CLIENT AUTHENTICATION TOKEN&gt;</code></pre><p><strong>Example script call with a dummy token</strong></p><pre><code data-prismjs-copy="Copy to clipboard">python call_spire_tcp_feed_parameters.py test_tcp.txt 100 streamingv2.ais.spire.com 56784 2 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21lciI6eyJpZCI6IjcxMSIsIm5hbWUiOiJTcGlyZSBUQ1AgREVNTyBET1ZFUiIsInV1aWQiOiI3MTEifSwiaXNzIjoic3BpcmUuY29tIiwiaWF0IjoxNTk1NDA0MTUxfQ.kOiZqAYH2-uY6EJZHLKwuqyMhP763CttvFm8DuQZQW8</code></pre><p><strong>Example response</strong></p><pre><code data-prismjs-copy="Copy to clipboard">python3 call_spire_tcp_feed_parameters.py t est_tcp.txt 100 streaming.ais.spire.com 56784 2 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21lciI6eyJpZCI6IjcxMSIsIm5hbWUiOiJTcGlyZSBUQ1AgRE VNTyBET1ZFUiIsInV1aWQiOiI3MTEifSwiaXNzIjoic3BpcmUuY29tIiwiaWF0IjoxNTk1NDA0MTUxfQ.kOiZqAYH2-uY6EJZHLKwuqyMhP763CttvFm8DuQZQW8 Program Start Time: 2020-07-22T09:55:43+02:00 server set to parameter value: streaming.ais.spire.com Run TCP client for 2 minutes Debug set to default of False - False Parameter Debug = : False Using API Token from parameters Using API Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjdXN0b21lciI6eyJpZCI6IjcxMSIsIm5hbWUiOiJTcGlyZSBUQ1AgREVNTyBET1ZFUiIsInV1aWQiOiI3MTEi fSwiaXNzIjoic3BpcmUuY29tIiwiaWF0IjoxNTk1NDA0MTUxfQ.kOiZqAYH2-uY6EJZHLKwuqyMhP763CttvFm8DuQZQW8 About to try connecting to: Server: streaming.ais.spire.com on port: 56784 Writing text data stream to file test_tcp.txt20200722-075543.txt Writing nmea data stream to file test_tcp.txt20200722-075543_nmea.txt Setting job message limit : 100 Connecting.. program has run for 0.0 minutes. 20200722-075546 Last Minute captured 1 records. Stopping as max_records number reached: 100 Stopping as max_records number reached: 100 Stopped after receiving 100 messages 100 API Processing ran from 20200722-075543 to 20200722-095546 received 100 lines of results Program run from 20200722-075543 to 20200722-095546 took (0.0, 2.779322) minutes Start time as unix time: 1595397343.0 End time as unix time: 1595397346.0 Elapsed time in seconds: 3 wc -l test_tcp.txt20200722-075543_nmea.txt 100 test_tcp.txt20200722-075543_nmea.txt </code></pre><p><strong>Showing the captured results</strong></p><pre><code data-prismjs-copy="Copy to clipboard">head -5 test_tcp.txt20200722-075543_nmea.txt 20200722-075546,b'\\c:1595382932*50\\!AIVDM,1,1,,B,13Hj;iPP00P7Am0M1`cN4?w02>`<,0*01\r' 20200722-075546,b'\\c:1595382943*56\\!AIVDM,1,1,,A,33QFvD500007=4nM1a0raF5F0>`<,0*3F\r' 20200722-075546,b'\\c:1595382957*53\\!AIVDM,1,1,,A,B3HjFSP0Fh1ba>7A4HFmwwtUoP06,0*1B\r' 20200722-075546,b'\\c:1595382966*51\\!AIVDM,1,1,,B,B3`erch0081Otk7D0MwQ3wS1nE6b,0*00\r' 20200722-075546,b'\\c:1595382969*5E\\!AIVDM,1,1,,B,13aFfS@P00P7Dc8M1VSN4?vB2>`<,0*05\r'</code></pre></div><div class="col col1">&nbsp;</div><div class="col col4"><p>You will need a demo or client authentication token to use this example script.</p><p>Not a customer yet? <a href="https://spire.com/maritime/get-started/" target="_blank" rel="noopener">Reach out to our team to request a trial token.</a></p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="181" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="181" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ae440"></div></div></div></section><section data-id="164" id="enhancements-over-v1" class="level2 " data-url="https://documentation.spire.com/tcp-stream-v2/enhancements-over-v1/"><div class="wrapper clearfix"><div class="col col7"><h2>Enhancements over v1</h2><p>The new TCP service is compatible with the old TCP service but there are multiple enhancements to consider.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="164" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="164" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ae614"></div></div></div></section><section data-id="165" id="additional-terrestrial-ais" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/enhancements-over-v1/additional-terrestrial-ais/"><div class="wrapper clearfix"><div class="col col7"><h3>Additional Terrestrial AIS</h3><p>Spire recently established a 3rd partner for provision of terrestrial AIS.</p><p>Data from this new partner and any future new partners will only be integrated into the new system.</p><p>Swapping to the new TCP stream will bring an immediate increase of about 20% in daily terrestrial AIS messages, a noted uplift in the US Gulf area and 3% uplift in the number of vessels reported by terrestrial AIS each day.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="165" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="165" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ae7c8"></div></div></div></section><section data-id="166" id="additional-nmea-tags" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/enhancements-over-v1/additional-nmea-tags/"><div class="wrapper clearfix"><div class="col col7"><h3>Additional NMEA Tags</h3><p>The NMEA <code>g</code> tag has now been implemented in the new TCP service. It is not used in the current service. So multipart messages (mainly message 5) will be received with the <code>g</code> tag clarifying the 2 parts of the message.</p><p>In the current system it is not required because we ensure the 2 message parts are always sent together but for the sake of absolute correctness we have implemented the tag in the new system.</p><p>Example of <code>g</code> tag in TCP Stream V2:</p><pre><code data-prismjs-copy="Copy to clipboard">\g:1-2-0,s:FM129,c:1611716038*43\!AIVDM,2,1,0,A,59NSD:@2BSk8CD&lt;;N20M8404&lt;F22162JlE;4ScNG3F83FU8888,0*60 \g:2-2-0*6D\!AIVDM,2,2,0,A,88888888880,2*24</code></pre><p>If including the <code>g</code> tag in the TCP stream causes you compatibility issues then we have the ability to disable it on a per customer basis.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="166" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="166" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460ae9b2"></div></div></div></section><section data-id="167" id="additional-checkpoint-controls" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/enhancements-over-v1/additional-checkpoint-controls/"><div class="wrapper clearfix"><div class="col col7"><h3>Additional checkpoint controls</h3><p>The v2 TCP Stream allows clients to set the checkpoint on their service to control the time from which data is streamed after the next re-connection. Read more about this in the &#8220;Understanding TCP server behavior&#8221; section.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="167" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="167" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460aeb98"></div></div></div></section><section data-id="168" id="performance" class="level3 " data-url="https://documentation.spire.com/tcp-stream-v2/enhancements-over-v1/performance/"><div class="wrapper clearfix"><div class="col col7"><h3>Performance</h3><p>The v2 TCP Stream runs on a new scalable IT infrastructure, designed to cope with the continually increasing AIS data volumes.</p><p>This has proven to perform much better than the old TCP, especially when a client catches up on several hours or days of data and this can now be done in minutes compared to hours on the old service.</p></div></div><div class="wrapper clearfix"><div class="col col7 feedback"> <span class="textlabel">Was this article useful?</span> <a class="givefeedback yes" href="#" data-section-id="168" data-value="1">Yes</a> <a class="givefeedback no" href="#" data-section-id="168" data-value="-1">No</a><div class="formcontainer" id="container-67b9c460aedca"></div></div></div></section></div></main><footer class="simple"><nav class="wrapper clearfix" id="postfooterlegal"><div class="col col12"> <a target="_blank" href="https://spire.com" id="copyright">© Spire Global</a><ul id="socialicons"><li><a href="https://www.facebook.com/spireglobal/" target="_blank" rel="noopener nofollow" title="Spire on Facebok"><i class="icon-facebook"></i></a></li><li><a href="https://twitter.com/SpireGlobal" rel="noopener nofollow" target="_blank" title="Spire on Twitter"><i class="icon-twitter"></i></a></li><li><a href="https://www.linkedin.com/company/spireglobal/" rel="noopener nofollow" target="_blank" title="Spire on LinkedIn"><i class="icon-linkedin"></i></a></li></ul><ul id="legalmenu"><li id="menu-item-995" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-995"><a target="_blank" href="https://spire.com/legal-disclaimer/">Legal Disclaimer</a></li><li id="menu-item-994" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-994"><a target="_blank" href="https://spire.com/privacy-policy/">Privacy Policy</a></li><li id="menu-item-1604" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1604"><a target="_blank" href="https://spire.com/cookie-policy/">Cookie Policy</a></li><li id="menu-item-5108" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5108"><a target="_blank" href="https://spire.com/accessibility/">Accessibility</a></li><li id="menu-item-3372" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3372"><a target="_blank" href="https://spire.com/our-data/terms-of-use/">Spire Online Data Terms &amp; Conditions</a></li><li id="menu-item-9107" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9107"><a target="_blank" href="https://spire.com/uk-modern-slavery-act-statement/">UK Modern Slavery Act Statement</a></li></ul></div></nav></footer><div id="searchpane"><div><div class="clearfix boxed"><form role="search" method="get" class="search-form" action="/" style="position: relative;"> <label> <span class="screen-reader-text sr-only">Search for:</span> <input type="search" class="search-field" placeholder="What are you looking for? Start typing to get suggestions..." name="s" data-rlvlive="true" data-rlvparentel="#rlvlive" data-rlvconfig="default"> </label><div id="rlvlive"></div></form></div></div></div> <script defer type="text/javascript" src="https://spire.com/wp-content/themes/spire2021/js/a.min.js?ver=6.7.1" id="a-js"></script> <script defer type="text/javascript" src="https://cdn.jsdelivr.net/npm/gsap@3.6.0/dist/gsap.min.js?ver=6.7.1" id="gsap-js"></script> <script defer type="text/javascript" src="https://cdn.jsdelivr.net/npm/gsap@3.6.0/dist/ScrollToPlugin.min.js?ver=6.7.1" id="gsap-scrollto-js"></script> <script defer type="text/javascript" src="https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/jquery.magnific-popup.min.js?ver=6.7.1" id="magnific-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_732d7fed67b698060223c7dc92318ea6.js?ver=1688136661" id="hubspot_lazy-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_8edcd5e59604e4fac5cf09494e6e2e15.js?ver=1679901433" id="imagepopup-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_c1c14bd64724eeeb816c72a664df7c24.js?ver=1679901433" id="popups-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_22d0c5f859ca466f5a015027d8fb3c17.js?ver=1679901433" id="feedback-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_3437dec8868ec14c38ea419b6e579a1d.js?ver=1679901433" id="most-visible-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_1135a95fb193562bd845ac465b56ee1d.js?ver=1698917261" id="documentation-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_a1a75439e41e75d4bc2ebcab10ddf91e.js?ver=1688995362" id="videochapters-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_431c5c8a3066177634667f012c12ab7c.js?ver=1679901433" id="search-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_17c54228666c5eb9b444388eb2e34b85.js?ver=1679901433" id="darkmode-js"></script> <script defer type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.0/highlight.min.js?ver=6.7.1" id="highlightjs-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_b1ac170c5c279a0f8f903636fa53b6d2.js?ver=1679901433" id="syntaxhighlighting-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_e59cb0bed635764fe5fa0122cbb2e39e.js?ver=6.7.1" id="prism-js"></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/cache/autoptimize/js/autoptimize_single_35f9d357c473ec32bafdd2909788f94a.js?ver=1679901433" id="menu-js"></script> <script defer id="relevanssi-live-search-client-js-extra" src="data:text/javascript;base64,dmFyIHJlbGV2YW5zc2lfbGl2ZV9zZWFyY2hfcGFyYW1zPVtdO3JlbGV2YW5zc2lfbGl2ZV9zZWFyY2hfcGFyYW1zPXsiYWpheHVybCI6Imh0dHBzOlwvXC9kb2N1bWVudGF0aW9uLnNwaXJlLmNvbVwvd3AtYWRtaW5cL2FkbWluLWFqYXgucGhwIiwiY29uZmlnIjp7ImRlZmF1bHQiOnsiaW5wdXQiOnsiZGVsYXkiOjMwMCwibWluX2NoYXJzIjozfSwicmVzdWx0cyI6eyJwb3NpdGlvbiI6ImJvdHRvbSIsIndpZHRoIjoiYXV0byIsIm9mZnNldCI6eyJ4IjowLCJ5Ijo1fSwic3RhdGljX29mZnNldCI6dHJ1ZX19fSwibXNnX25vX2NvbmZpZ19mb3VuZCI6Ik5vIHZhbGlkIFJlbGV2YW5zc2kgTGl2ZSBTZWFyY2ggY29uZmlndXJhdGlvbiBmb3VuZCEiLCJtc2dfbG9hZGluZ19yZXN1bHRzIjoiTG9hZGluZyBzZWFyY2ggcmVzdWx0cy4iLCJtZXNzYWdlc190ZW1wbGF0ZSI6IjxkaXYgY2xhc3M9XCJsaXZlLWFqYXgtbWVzc2FnZXNcIj5cblx0PGRpdiBpZD1cInJlbGV2YW5zc2ktbGl2ZS1hamF4LXNlYXJjaC1zcGlubmVyXCI+PFwvZGl2PlxuPFwvZGl2PlxuIn07Ow=="></script> <script defer type="text/javascript" src="https://documentation.spire.com/wp-content/plugins/relevanssi-live-ajax-search/assets/javascript/dist/script.min.js?ver=2.4" id="relevanssi-live-search-client-js"></script> </body></html>

Pages: 1 2 3 4 5 6 7 8 9 10