{"id":3169,"date":"2026-02-05T19:02:29","date_gmt":"2026-02-05T11:02:29","guid":{"rendered":"https:\/\/www.dpriver.com\/blog\/?p=3169"},"modified":"2026-02-05T19:02:29","modified_gmt":"2026-02-05T11:02:29","slug":"understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale","status":"publish","type":"post","link":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/","title":{"rendered":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale"},"content":{"rendered":"\n<p>When dealing with large-scale data environments, analyzing data lineage manually becomes impractical. You might have hundreds of SQL files across different repositories, databases, and ETL processes. This is where <strong>SQLFlow Job<\/strong> comes into play \u2013 a powerful feature that enables batch processing of SQL files for automated data lineage discovery.<\/p>\n\n\n\n<p>In this article, we&#8217;ll explore two ways to create and manage SQLFlow Jobs: through the intuitive <strong>Web UI<\/strong> and programmatically via the <strong>REST API<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Part 1: Creating Jobs Through the SQLFlow UI<\/h2>\n\n\n\n<p>The SQLFlow web interface provides a user-friendly way to create and manage jobs without writing any code. This is perfect for ad-hoc analysis, exploration, and users who prefer a visual approach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Access the Job Creation Panel<\/h3>\n\n\n\n<p>After logging into <a href=\"https:\/\/sqlflow.gudusoft.com\">SQLFlow<\/a>, navigate to the Job List section and click the <strong>Job Creation<\/strong> button.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Choose Your Job Source<\/h3>\n\n\n\n<p>SQLFlow supports multiple data sources for job creation:<\/p>\n\n\n\n<ul>\n<li><strong>Upload File<\/strong>: Upload SQL files or a ZIP archive containing multiple SQL files (up to 200MB). This is ideal for analyzing DDL scripts, stored procedures, or any SQL codebase.<\/li>\n<li><strong>From Database<\/strong>: Connect directly to your database server. SQLFlow will read metadata and SQL objects to generate lineage automatically.<\/li>\n<li><strong>Upload File + Database Metadata<\/strong>: Combine uploaded SQL files with database metadata to resolve column ambiguities for more accurate lineage.<\/li>\n<li><strong>dbt<\/strong>: Import lineage from your dbt transformation projects using manifest.json and catalog.json files.<\/li>\n<li><strong>Snowflake Query History<\/strong>: Analyze lineage from Snowflake query history automatically.<\/li>\n<li><strong>Redshift Log<\/strong>: Parse Amazon Redshift logs (.gz or .zip format) for lineage discovery.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Configure Job Parameters<\/h3>\n\n\n\n<p>Set up your job with these options:<\/p>\n\n\n\n<ul>\n<li><strong>Database Vendor<\/strong>: Select your SQL dialect (Oracle, SQL Server, MySQL, PostgreSQL, Snowflake, etc.)<\/li>\n<li><strong>Default Server\/Database\/Schema<\/strong>: Set default values for unqualified object references<\/li>\n<li><strong>Job Type<\/strong>: Choose between regular job or summary mode for large datasets<\/li>\n<li><strong>Advanced Settings<\/strong>: Filter specific schemas, stored procedures, or views to include\/exclude<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: View and Manage Results<\/h3>\n\n\n\n<p>Once the job completes, you can:<\/p>\n\n\n\n<ul>\n<li><strong>Lineage Overview<\/strong>: View table-level lineage across your entire database<\/li>\n<li><strong>Lineage Detail<\/strong>: Drill down into column-level relationships<\/li>\n<li><strong>Job Info<\/strong>: Check metadata like creation time, execution time, and job status<\/li>\n<li><strong>Export<\/strong>: Download results in JSON, CSV, or GraphML formats<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Part 2: Creating Jobs Through the REST API<\/h2>\n\n\n\n<p>For automation, CI\/CD integration, and programmatic access, SQLFlow provides a comprehensive REST API. This approach is ideal for scheduled lineage scans, integration with data pipelines, and enterprise automation scenarios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">API Authentication<\/h3>\n\n\n\n<p>First, obtain your API credentials (userId and token) from your SQLFlow account settings. See the <a href=\"https:\/\/docs.gudusoft.com\/3.-api-docs\/prerequisites#generate-account-secret\">prerequisites documentation<\/a> for details.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Submit a Job<\/h3>\n\n\n\n<p>Use the <code>\/submitUserJob<\/code> endpoint to upload SQL files:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST \"https:\/\/api.gudusoft.com\/gspLive_backend\/sqlflow\/job\/submitUserJob\" \\\n  -H \"Content-Type:multipart\/form-data\" \\\n  -F \"userId=YOUR_USER_ID\" \\\n  -F \"token=YOUR_TOKEN\" \\\n  -F \"sqlfiles=@\/path\/to\/queries.sql\" \\\n  -F \"sqlfiles=@\/path\/to\/procedures.sql\" \\\n  -F \"dbvendor=dbvoracle\" \\\n  -F \"jobName=my-lineage-analysis\"<\/code><\/pre>\n\n\n\n<p>The API returns a <code>jobId<\/code> for tracking:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"code\": 200,\n  \"data\": {\n    \"jobId\": \"c359aef4bd9641d697732422debd8055\",\n    \"jobName\": \"my-lineage-analysis\",\n    \"status\": \"create\"\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check Job Status<\/h3>\n\n\n\n<p>Monitor progress with <code>\/displayUserJobSummary<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST \"https:\/\/api.gudusoft.com\/gspLive_backend\/sqlflow\/job\/displayUserJobSummary\" \\\n  -F \"jobId=c359aef4bd9641d697732422debd8055\" \\\n  -F \"userId=YOUR_USER_ID\" \\\n  -F \"token=YOUR_TOKEN\"<\/code><\/pre>\n\n\n\n<p>When <code>status<\/code> becomes <code>success<\/code>, your lineage is ready.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Export Lineage Results<\/h3>\n\n\n\n<p>Download results in your preferred format:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># JSON format\ncurl -X POST \"...\/exportLineageAsJson\" -F \"jobId=...\" --output lineage.json\n\n# CSV format  \ncurl -X POST \"...\/exportFullLineageAsCsv\" -F \"jobId=...\" --output lineage.csv\n\n# GraphML format (for yEd visualization)\ncurl -X POST \"...\/exportLineageAsGraphml\" -F \"jobId=...\" --output lineage.graphml<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Incremental Jobs<\/h3>\n\n\n\n<p>For evolving codebases, use incremental analysis with <code>\/submitPersistJob<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST \"...\/submitPersistJob\" \\\n  -F \"incremental=true\" \\\n  -F \"jobId=EXISTING_JOB_ID\" \\\n  -F \"sqlfiles=@\/path\/to\/updated_queries.sql\" \\\n  ...<\/code><\/pre>\n\n\n\n<p>This updates the existing lineage graph without re-analyzing everything.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When to Use UI vs API<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Scenario<\/th><th>Recommended Approach<\/th><\/tr><\/thead><tbody><tr><td>Ad-hoc analysis and exploration<\/td><td>UI<\/td><\/tr><tr><td>One-time database lineage scan<\/td><td>UI<\/td><\/tr><tr><td>CI\/CD pipeline integration<\/td><td>API<\/td><\/tr><tr><td>Scheduled nightly lineage scans<\/td><td>API<\/td><\/tr><tr><td>Integration with data catalog tools<\/td><td>API<\/td><\/tr><tr><td>Quick visualization needs<\/td><td>UI<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Real-World Use Cases<\/h2>\n\n\n\n<ol>\n<li><strong>Data Governance Automation<\/strong>: Schedule nightly API jobs to scan your data warehouse SQL and detect lineage changes<\/li>\n<li><strong>CI\/CD Integration<\/strong>: Trigger lineage analysis when SQL changes are committed to your repository<\/li>\n<li><strong>Migration Projects<\/strong>: Use the UI to batch analyze legacy stored procedures before modernization<\/li>\n<li><strong>Compliance Audits<\/strong>: Generate lineage reports in CSV format for regulatory requirements<\/li>\n<li><strong>Impact Analysis<\/strong>: Before modifying a table, understand all downstream dependencies<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Getting Started<\/h2>\n\n\n\n<p>Ready to try SQLFlow Job? Here&#8217;s how to get started:<\/p>\n\n\n\n<ol>\n<li><strong>Sign up<\/strong> at <a href=\"https:\/\/sqlflow.gudusoft.com\">sqlflow.gudusoft.com<\/a> for a free trial<\/li>\n<li><strong>Try the UI<\/strong>: Upload a SQL file and explore the interactive lineage visualization<\/li>\n<li><strong>Explore the API<\/strong>: Check the <a href=\"https:\/\/docs.gudusoft.com\/3.-api-docs\/sqlflow-rest-api-reference\/job-interface\/\">Job API documentation<\/a> for code samples<\/li>\n<\/ol>\n\n\n\n<p>Whether you prefer the visual approach or need full automation, SQLFlow Job provides the flexibility to handle data lineage analysis at any scale.<\/p>\n\n\n\n<p><a href=\"https:\/\/sqlflow.gudusoft.com\">Try SQLFlow today<\/a> \u2013 your data lineage journey starts here.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When dealing with large-scale data environments, analyzing data lineage manually becomes impractical. You might have hundreds of SQL files across different repositories, databases, and ETL processes. This is where SQLFlow Job comes into play \u2013 a powerful feature that enables batch processing of SQL files for automated data lineage discovery. In this article, we&#8217;ll explore two ways to create and manage SQLFlow Jobs: through the intuitive Web UI and programmatically via the REST API. Part 1: Creating Jobs Through the SQLFlow UI The SQLFlow web interface provides a user-friendly way to create and manage jobs without writing any code. This\u2026<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale<\/title>\n<meta name=\"description\" content=\"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale\" \/>\n<meta property=\"og:description\" content=\"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/\" \/>\n<meta property=\"og:site_name\" content=\"SQL and Data Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-05T11:02:29+00:00\" \/>\n<meta name=\"author\" content=\"James\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\",\"name\":\"SQL and Data Blog\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"contentUrl\":\"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png\",\"width\":251,\"height\":72,\"caption\":\"SQL and Data Blog\"},\"image\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\",\"url\":\"https:\/\/www.dpriver.com\/blog\/\",\"name\":\"SQL and Data Blog\",\"description\":\"SQL related blog for database professional\",\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/\",\"url\":\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/\",\"name\":\"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#website\"},\"datePublished\":\"2026-02-05T11:02:29+00:00\",\"dateModified\":\"2026-02-05T11:02:29+00:00\",\"description\":\"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dpriver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/\"},\"author\":{\"name\":\"James\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/7bbdbb6e79c5dd9747d08c59d5992b04\"},\"headline\":\"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale\",\"datePublished\":\"2026-02-05T11:02:29+00:00\",\"dateModified\":\"2026-02-05T11:02:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/\"},\"wordCount\":653,\"publisher\":{\"@id\":\"https:\/\/www.dpriver.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/7bbdbb6e79c5dd9747d08c59d5992b04\",\"name\":\"James\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/eeddf4ca7bdafa37ab025068efdc7302?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/eeddf4ca7bdafa37ab025068efdc7302?s=96&d=mm&r=g\",\"caption\":\"James\"},\"sameAs\":[\"http:\/\/www.dpriver.com\"],\"url\":\"https:\/\/www.dpriver.com\/blog\/author\/james\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale","description":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/","og_locale":"en_US","og_type":"article","og_title":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale","og_description":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale","og_url":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/","og_site_name":"SQL and Data Blog","article_published_time":"2026-02-05T11:02:29+00:00","author":"James","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.dpriver.com\/blog\/#organization","name":"SQL and Data Blog","url":"https:\/\/www.dpriver.com\/blog\/","sameAs":[],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","contentUrl":"https:\/\/www.dpriver.com\/blog\/wp-content\/uploads\/2022\/07\/sqlpp-character.png","width":251,"height":72,"caption":"SQL and Data Blog"},"image":{"@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.dpriver.com\/blog\/#website","url":"https:\/\/www.dpriver.com\/blog\/","name":"SQL and Data Blog","description":"SQL related blog for database professional","publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dpriver.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/","url":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/","name":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/#website"},"datePublished":"2026-02-05T11:02:29+00:00","dateModified":"2026-02-05T11:02:29+00:00","description":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale","breadcrumb":{"@id":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dpriver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale"}]},{"@type":"Article","@id":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/#article","isPartOf":{"@id":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/"},"author":{"name":"James","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/7bbdbb6e79c5dd9747d08c59d5992b04"},"headline":"Understanding SQLFlow Job: Automate Your Data Lineage Analysis at Scale","datePublished":"2026-02-05T11:02:29+00:00","dateModified":"2026-02-05T11:02:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dpriver.com\/blog\/understanding-sqlflow-job-automate-your-data-lineage-analysis-at-scale\/"},"wordCount":653,"publisher":{"@id":"https:\/\/www.dpriver.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/7bbdbb6e79c5dd9747d08c59d5992b04","name":"James","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dpriver.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/eeddf4ca7bdafa37ab025068efdc7302?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/eeddf4ca7bdafa37ab025068efdc7302?s=96&d=mm&r=g","caption":"James"},"sameAs":["http:\/\/www.dpriver.com"],"url":"https:\/\/www.dpriver.com\/blog\/author\/james\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/3169"}],"collection":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/comments?post=3169"}],"version-history":[{"count":1,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/3169\/revisions"}],"predecessor-version":[{"id":3170,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/posts\/3169\/revisions\/3170"}],"wp:attachment":[{"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/media?parent=3169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/categories?post=3169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dpriver.com\/blog\/wp-json\/wp\/v2\/tags?post=3169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}