API Documentation

API Endpoint

Purchase Orders

Purchase Orders

In Productive purchase orders are documents that serve as a buyer’s request to a seller to order goods or services. You can find out more about purchase orders in our Help documentation: Purchase Orders

Purchase Orders always belong to a budget and a vendor (seller). They can have multiple expenses, bills and bill items.

Following diagram shows services in our data hierarchy:

Purchase Order diagram

The enumeration status_id can be:

  • 1 (Draft)

  • 2 (Finalized)

The enumeration payment_status_id can be:

  • 1 (Not received)

  • 2 (Partially received)

  • 3 (Fully received)

Supported filter params

  • deal_id (array)

  • vendor_id (array)

  • id

  • deal_id

  • vendor_id

  • status_id

  • issued_on

  • delivery_on

  • sent_on

  • received_on

  • created_at

  • total_cost

  • total_cost_with_tax

  • total_received

Supported sort params

  • deal_id

  • vendor_id

  • deal_id

  • vendor_id

  • status_id

  • issued_on

  • delivery_on

  • sent_on

  • received_on

  • created_at

  • total_cost

  • total_cost_with_tax

  • total_received

GET /api/v2/purchase_orders/1
Requestsreturns purchase orders

GET  /api/v2/purchase_orders/22

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "22",
    "type": "purchase_orders",
    "attributes": {
      "subject": null,
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": null,
      "received_on": null,
      "created_at": "2025-08-02T02:09:07.060+02:00",
      "number": "1",
      "note": null,
      "note_interpolated": null,
      "email_key": "81a3861964f2a50fa9430c407ca00ba4",
      "payment_status_id": 3,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 0,
      "total_cost_default": 0,
      "total_cost_normalized": 0,
      "total_cost_with_tax": 0,
      "total_cost_with_tax_default": 0,
      "total_cost_with_tax_normalized": 0,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1040"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

Gets a purchase order
GET/api/v2/purchase_orders/{id}

URI Parameters
HideShow
id
number (required) Example: 1

purchase order id


POST /api/v2/purchase_orders
Requestscreates purchase orderreturns error

POST  /api/v2/purchase_orders

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_orders",
    "attributes": {
      "currency": "EUR",
      "issued_on": "2025-08-02"
    },
    "relationships": {
      "deal": {
        "data": {
          "type": "quotes",
          "id": "673"
        }
      },
      "vendor": {
        "data": {
          "type": "clients",
          "id": "2781"
        }
      }
    }
  }
}
Responses201
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "24",
    "type": "purchase_orders",
    "attributes": {
      "subject": null,
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": null,
      "received_on": null,
      "created_at": "2025-08-02T02:09:07.188+02:00",
      "number": "2",
      "note": null,
      "note_interpolated": null,
      "email_key": "91e71a7bb0567be9c7a67e52ac7c89b1",
      "payment_status_id": 3,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 0,
      "total_cost_default": 0,
      "total_cost_normalized": 0,
      "total_cost_with_tax": 0,
      "total_cost_with_tax_default": 0,
      "total_cost_with_tax_normalized": 0,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1041"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

POST  /api/v2/purchase_orders

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_orders",
    "attributes": {
      "currency": "EUR",
      "issued_on": "2025-08-02"
    },
    "relationships": {
      "deal": {
        "data": {
          "type": "quotes",
          "id": "0"
        }
      },
      "vendor": {
        "data": {
          "type": "clients",
          "id": "2784"
        }
      }
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "attribute is invalid",
      "source": {
        "pointer": "data/attributes/deal"
      }
    }
  ]
}

Create a purchase order
POST/api/v2/purchase_orders


PATCH /api/v2/purchase_orders/1
Requestsupdates purchase orderreturns errorreturns error

PATCH  /api/v2/purchase_orders/28

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_orders",
    "attributes": {
      "currency": "EUR",
      "issued_on": "2025-08-02"
    },
    "relationships": {
      "deal": {
        "data": {
          "type": "quotes",
          "id": "678"
        }
      },
      "vendor": {
        "data": {
          "type": "clients",
          "id": "2796"
        }
      },
      "subscribers": {
        "data": [
          {
            "type": "people",
            "id": "3862"
          },
          {
            "type": "people",
            "id": "3863"
          }
        ]
      }
    }
  }
}
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "28",
    "type": "purchase_orders",
    "attributes": {
      "subject": null,
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": null,
      "received_on": null,
      "created_at": "2025-08-02T02:09:07.662+02:00",
      "number": "1",
      "note": null,
      "note_interpolated": null,
      "email_key": "efe6d2bb8459dde0c2a1b00f405079d3",
      "payment_status_id": 3,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 0,
      "total_cost_default": 0,
      "total_cost_normalized": 0,
      "total_cost_with_tax": 0,
      "total_cost_with_tax_default": 0,
      "total_cost_with_tax_normalized": 0,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1045"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

PATCH  /api/v2/purchase_orders/29

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_order",
    "attributes": {
      "currency": "EUR",
      "issued_on": "2025-08-02"
    },
    "relationships": {
      "deal": {
        "data": {
          "type": "quotes",
          "id": "0"
        }
      }
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "attribute is invalid",
      "source": {
        "pointer": "data/attributes/deal"
      }
    }
  ]
}

PATCH  /api/v2/purchase_orders/30

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_order",
    "attributes": {},
    "relationships": {
      "deal": {
        "vendor": {
          "type": "clients",
          "id": "0"
        }
      }
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "can't be blank",
      "source": {
        "pointer": "data/attributes/deal"
      }
    }
  ]
}

Update a purchase order
PATCH/api/v2/purchase_orders/{id}

URI Parameters
HideShow
id
number (required) Example: 1

purchase order id


DELETE /api/v2/purchase_orders/1
Requestsdeletes purchse_order

DELETE  /api/v2/purchase_orders/31

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses204
This response has no content.

Deletes a purchase order
DELETE/api/v2/purchase_orders/{id}

URI Parameters
HideShow
id
number (required) Example: 1

purchase order id


POST /api/v2/purchase_orders/copy
Requestscopy from templatecopy from templatecopies the purchase order and expenses

POST  /api/v2/purchase_orders/copy

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_order",
    "attributes": {
      "template_id": 32,
      "deal_id": 682
    }
  }
}
Responses201
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "33",
    "type": "purchase_orders",
    "attributes": {
      "subject": "template",
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": null,
      "received_on": null,
      "created_at": "2025-08-02T02:09:08.280+02:00",
      "number": "2",
      "note": null,
      "note_interpolated": null,
      "email_key": "bc0dfcbc0218725afd0a8087548d3476",
      "payment_status_id": 3,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 0,
      "total_cost_default": 0,
      "total_cost_normalized": 0,
      "total_cost_with_tax": 0,
      "total_cost_with_tax_default": 0,
      "total_cost_with_tax_normalized": 0,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1049"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

POST  /api/v2/purchase_orders/copy

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_order",
    "attributes": {
      "template_id": 34,
      "deal_id": 684
    }
  }
}
Responses201
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "35",
    "type": "purchase_orders",
    "attributes": {
      "subject": "template",
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": null,
      "received_on": null,
      "created_at": "2025-08-02T02:09:08.453+02:00",
      "number": "2",
      "note": null,
      "note_interpolated": null,
      "email_key": "b781e1528a04ab96a53c6abf5d1d55a3",
      "payment_status_id": 3,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 0,
      "total_cost_default": 0,
      "total_cost_normalized": 0,
      "total_cost_with_tax": 0,
      "total_cost_with_tax_default": 0,
      "total_cost_with_tax_normalized": 0,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1050"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

POST  /api/v2/purchase_orders/copy

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_order",
    "attributes": {
      "template_id": 36,
      "deal_id": 686
    }
  }
}
Responses201
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "37",
    "type": "purchase_orders",
    "attributes": {
      "subject": null,
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": null,
      "received_on": null,
      "created_at": "2025-08-02T02:09:08.748+02:00",
      "number": "2",
      "note": null,
      "note_interpolated": null,
      "email_key": "3ffc70a76dd260e0258c04b38acc8e86",
      "payment_status_id": 1,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 10000,
      "total_cost_default": 12500,
      "total_cost_normalized": 10000,
      "total_cost_with_tax": 10000,
      "total_cost_with_tax_default": 12500,
      "total_cost_with_tax_normalized": 10000,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1051"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

Copies a purchase order
POST/api/v2/purchase_orders/copy

URI Parameters
HideShow
id
number (required) Example: 1

purchase order id


PATCH /api/v2/purchase_orders/1/send
Requestssends purchase_order via mailreturns errorsends purchase_order via mail

PATCH  /api/v2/purchase_orders/38/send

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_orders",
    "attributes": {
      "to": [
        "test@email.com"
      ],
      "cc": [
        "test@productive.io",
        "test-2@productive.io"
      ],
      "bcc": [
        "mail@something.com"
      ],
      "subject": "Mail title",
      "body": "Lorem ipsum dolor si amet"
    }
  }
}
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "38",
    "type": "purchase_orders",
    "attributes": {
      "subject": null,
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": "2025-08-02",
      "received_on": null,
      "created_at": "2025-08-02T02:09:08.884+02:00",
      "number": "1",
      "note": null,
      "note_interpolated": null,
      "email_key": "b209ef951ec874612cf18dd83a9925d6",
      "payment_status_id": 3,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 0,
      "total_cost_default": 0,
      "total_cost_normalized": 0,
      "total_cost_with_tax": 0,
      "total_cost_with_tax_default": 0,
      "total_cost_with_tax_normalized": 0,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1052"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

PATCH  /api/v2/purchase_orders/42/send

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_orders",
    "attributes": {
      "to": [
        "invalid mail"
      ]
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "invalid mail is not an email",
      "source": {
        "pointer": "data/attributes/to"
      }
    },
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "can't be blank",
      "source": {
        "pointer": "data/attributes/subject"
      }
    },
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "can't be blank",
      "source": {
        "pointer": "data/attributes/body"
      }
    },
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "When in trial you can send emails only to yourself",
      "source": {
        "pointer": "data/attributes/to"
      }
    }
  ]
}

PATCH  /api/v2/purchase_orders/43/send

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "purchase_orders",
    "attributes": {
      "to": [
        "test@email.com"
      ],
      "cc": [
        "test@productive.io",
        "test-2@productive.io"
      ],
      "bcc": [
        "mail@something.com"
      ],
      "subject": "Mail title",
      "body": "Lorem ipsum dolor si amet"
    }
  }
}
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "43",
    "type": "purchase_orders",
    "attributes": {
      "subject": null,
      "status_id": null,
      "issued_on": "2025-08-02",
      "delivery_on": null,
      "sent_on": "2025-08-02",
      "received_on": null,
      "created_at": "2025-08-02T02:09:09.942+02:00",
      "number": "1",
      "note": null,
      "note_interpolated": null,
      "email_key": "9e92cb0618ebc337ac15b4914acc987a",
      "payment_status_id": 3,
      "exchange_rate": "1.25",
      "exchange_date": "2025-08-02",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "total_cost": 0,
      "total_cost_default": 0,
      "total_cost_normalized": 0,
      "total_cost_with_tax": 0,
      "total_cost_with_tax_default": 0,
      "total_cost_with_tax_normalized": 0,
      "total_received": 0,
      "total_received_default": 0,
      "total_received_normalized": 0
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "1057"
        }
      },
      "vendor": {
        "meta": {
          "included": false
        }
      },
      "deal": {
        "meta": {
          "included": false
        }
      },
      "creator": {
        "meta": {
          "included": false
        }
      },
      "document_type": {
        "meta": {
          "included": false
        }
      },
      "attachment": {
        "meta": {
          "included": false
        }
      },
      "bill_to": {
        "meta": {
          "included": false
        }
      },
      "bill_from": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

Sends a purchase order
PATCH/api/v2/purchase_orders/{id}/send

URI Parameters
HideShow
id
number (required) Example: 1

purchase order id


Generated by aglio on 02 Aug 2025